2011-04-15 83 views
3

我正在使用Android的地理编码器允许在基于地图的应用中搜索位置。地理编码效果很好,并且该应用程序成功重新映射了地理编码结果上的MapView。问题是,我不知道移动到新位置时使用的缩放级别。 location_query参数可能是一条街道,也可能是一个国家 - 我如何知道要放大多大才能显示结果位置?也就是说,我用什么替换???如何计算Android地理编码结果的缩放级别

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(???); 
    } 
} 

回答

0

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

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

+1

对不起,这不会对我的应用程序。在用户搜索“美国”后,将缩放级别设置为18会让您看到堪萨斯州科菲维尔附近的一些农村地区。地理编码器应提供地理编码地名的范围的一些度量,例如REST Geocoder API。 – Mzzzzzz 2011-04-26 18:23:17

3

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

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

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

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/

相关问题