我正在使用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(???);
}
}
答案 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对,然后通过上述函数之间的差异来获得最佳缩放级别。