如何使用 OSMDroid 缩放到特定国家/地区?
How to zoom to a specific country with OSMDroid?
假设以下情况:
用户从列表中选择一个国家。单击国家/地区后,地图应缩放至所选国家/地区。
如果我只知道列表中的国家名称,如何在 OSMDroid 中实现 zoomToCountry?
在PHPAPI"GoogleMaps v3"中有一个解决方案像
function findAddress(address) {
var geocoder = null;
geocoder = new google.maps.Geocoder();
if (!address)
var address=document.getElementById("countryselect").value;
if ((address != '') && geocoder) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
if (results && results[0] && results[0].geometry && results[0].geometry.viewport)
map.fitBounds(results[0].geometry.viewport);
} else {
alert("No results found");
}
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
}
OSMDroid 或 OSMBonuspack 中有类似的吗?
PHP 解决方案是使用国家名称调用地理编码服务,以获取国家边界框。
您可以使用 Nominatim 服务做类似的事情。所以 OSMBonusPack GeocoderNominatim 应该可用。
大致如此(没有错误处理、AsyncTask 等):
GeocoderNominatim coder = new GeocoderNominatim(ctx);
List<Address> results = coder.getFromLocationName(countryName, 1);
Address address = results.get(0);
Bundle extras = address.getExtras();
BoundingBoxE6 bb = extras.getParcelable("boundingbox");
然后:
mapView.zoomToBoundingBox(bb);
就像 PHP/GoogleMaps 解决方案一样简单,不是吗?
假设以下情况:
用户从列表中选择一个国家。单击国家/地区后,地图应缩放至所选国家/地区。
如果我只知道列表中的国家名称,如何在 OSMDroid 中实现 zoomToCountry?
在PHPAPI"GoogleMaps v3"中有一个解决方案像
function findAddress(address) {
var geocoder = null;
geocoder = new google.maps.Geocoder();
if (!address)
var address=document.getElementById("countryselect").value;
if ((address != '') && geocoder) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
if (status != google.maps.GeocoderStatus.ZERO_RESULTS) {
if (results && results[0] && results[0].geometry && results[0].geometry.viewport)
map.fitBounds(results[0].geometry.viewport);
} else {
alert("No results found");
}
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
}
OSMDroid 或 OSMBonuspack 中有类似的吗?
PHP 解决方案是使用国家名称调用地理编码服务,以获取国家边界框。
您可以使用 Nominatim 服务做类似的事情。所以 OSMBonusPack GeocoderNominatim 应该可用。
大致如此(没有错误处理、AsyncTask 等):
GeocoderNominatim coder = new GeocoderNominatim(ctx);
List<Address> results = coder.getFromLocationName(countryName, 1);
Address address = results.get(0);
Bundle extras = address.getExtras();
BoundingBoxE6 bb = extras.getParcelable("boundingbox");
然后:
mapView.zoomToBoundingBox(bb);
就像 PHP/GoogleMaps 解决方案一样简单,不是吗?