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

时间:2011-04-15 22:22:17

标签: android android-mapview google-geocoder

我正在使用Android的地理编码器来搜索基于地图的应用中的位置。地理编码效果很好,应用程序成功地在地理编码结果上重新定位MapView。问题是我不知道移动到新位置时要使用的缩放级别。 location_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(???);
    }
}

3 个答案:

答案 0 :(得分:3)

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

  

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

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

答案 1 :(得分:2)

Android地理编码API仅提供纬度和经度。另一方面,Web地理编码API提供缩放地图所需的纬度,经度和视口。需要注意的是,在Google决定扩展其Android API之前,您需要使用Web API来获取丢失的视口缩放数据。

幸运的是,使用Web API并不是太难,因为GeocoderPlus库可以为您执行所有Web API请求和JSON解析,并仅返回Java对象作为结果。它有一个类似于原生Geocoder的界面,它以JAR格式提供,可以包含在您的Android应用程序中。

查看下面的博文,了解用法: http://bricolsoftconsulting.com/perfect-geocoding-zoom-part-2/

答案 2 :(得分:0)

你可以做setZoom(18)或类似的东西,因为你只有一个要显示的点。

如果您有多个积分,那么您需要的是zoomToSpan。您需要做的是找到最小和最大lat / lng对,然后通过上述函数之间的差异来获得最佳缩放级别。