如何计算Android Geocoder结果的缩放级别

如何计算Android Geocoder结果的缩放级别,android,android-mapview,google-geocoder,Android,Android Mapview,Google Geocoder,我正在使用Android的地理编码器在我基于地图的应用程序中搜索位置。地理编码工作正常,应用程序成功地在地理编码结果上重新居中显示地图视图。问题是,我不知道移动到新位置时要使用什么缩放级别。location\u query参数可以是一条街道,也可以是一个国家——我如何知道放大多远才能显示结果位置?也就是说,我应该用什么替换? public void goToPlace(String location_query) { List<Address> addresses;

我正在使用Android的地理编码器在我基于地图的应用程序中搜索位置。地理编码工作正常,应用程序成功地在地理编码结果上重新居中显示地图视图。问题是,我不知道移动到新位置时要使用什么缩放级别。
location\u query
参数可以是一条街道,也可以是一个国家——我如何知道放大多远才能显示结果位置?也就是说,我应该用什么替换

public void goToPlace(String location_query) {

    List<Address> addresses;
    Geocoder gc = new Geocoder(_ctx);

    addresses = gc.getFromLocationName(location_query, 1);
    if (addresses != null) {
        Address a = addresses.get(0);
        int lat = (int) (a.getLatitude() * 1E6);
        int lon = (int) (a.getLongitude() * 1E6);
        mapController.animateTo(new GeoPoint(lat, lon));
        mapController.setZoom(???);
    }
}
public void goToPlace(字符串位置\u查询){
列出地址;
地理编码器gc=新地理编码器(_ctx);
addresses=gc.getFromLocationName(位置查询,1);
如果(地址!=null){
地址a=地址。获取(0);
intlat=(int)(a.getLatitude()*1E6);
int lon=(int)(a.getLongitude()*1E6);
mapController.animateTo(新地质点(纬度、经度));
mapController.setZoom(???);
}
}
您可以执行setZoom(18)或类似操作,因为您只有一个点要显示


如果你有多个点,那么你需要的是。您需要做的是找到最小和最大lat/lng对,然后将两者之间的差异传递给上述函数以获得最佳缩放级别。

我的想法是使用方法
getAddressLine
选择适当的缩放级别。正如文件所说:

返回由给定索引(从0开始)编号的地址行,如果不存在这样的行,则返回null


所以对于一个国家,它只返回1行地址,对于城市2行,对于街道3行。对于每种情况,您可以使用不同的缩放级别。

Android地理编码API仅提供纬度和经度。另一方面,Web地理编码API提供缩放地图所需的纬度、经度和视口。值得注意的是,在谷歌决定扩展其Android API之前,您需要使用web API获取缺少的视口缩放数据

幸运的是,由于GeocoderPlus库,使用web API并不太困难,它为您完成所有web API请求和JSON解析,并且只返回Java对象作为结果。它有一个类似于本地Geocoder的界面,可以在Android应用程序中使用JAR格式

查看下面的博客文章了解用法:

对不起,这不适用于我的应用程序。在用户搜索“美国”后,将缩放级别设置为18会让您看到堪萨斯州科菲维尔附近的一些农村地区。地理编码器应该提供地理编码地名范围的一些度量,就像其他地理编码器API一样。