确定Android Map v2上地理编码地址的最佳缩放级别

时间:2013-08-01 15:02:12

标签: android google-maps android-maps-v2

我正在开发Android应用程序。在其中一个视图中,用户可以键入地址(不太可能在Google地图中键入的内容),并从反向地理编码地址列表中选择结果。 使用getLocationFromName方法通过Geocoder类(android.location.Geocoder类)进行地理编码。 然后我使用Lat / Lng使用CameraPosition.Builder()。target(pos)移动GoogleMap相机,但我没有提示要使用哪个zoomLevel。

客户要求我复制类似于android上的Maps应用程序的行为,通常是这样的:

  • 如果我搜索像“米兰,意大利”这样的城镇,地图以城镇为中心并进行缩放,以便可以看到大部分城镇。
  • 如果我搜索一条没有数字的道路(可能很长),例如“Viale Fulvio Testi,Milano,Italy”,地图就会在路上放大,大部分时间都是整条道路(或大部分道路) )在屏幕上可见。
  • 如果我还添加街道号码(例如“Viale Fulvio Testi 1,Milano,Italy”),缩放甚至可能会更大一些。 *

我在地图上没有标记,也不必显示当前用户位置。只是输入的位置。

有关如何复制GMap行为的任何建议吗?

似乎Google地图可以将“地区”与给定地址相关联,确定该地区的某种“边界框”,然后确保该地区在地图上完全可见,但目前看来我无法找出与结果相关的任何区域。

想到的其他想法(快速和肮脏)是检查各种android.location.Address字段(featureName,subLocality,locality,...)将缩放级别与每个相关联,并根据哪个是确定缩放级别现在,但这可能是不精确的:寻找小城镇可能会导致变焦变大,否则,大城镇可能无法适应屏幕...

1 个答案:

答案 0 :(得分:0)

您可以使用Google Geocoding API,它会返回您要查找的边界框,例如:

http://maps.google.com/maps/api/geocode/json?address=Viale+Fulvio+Testi,+Milano,+Italy&sensor=false

返回

        "bounds" : {
           "northeast" : {
              "lat" : 45.52959160,
              "lng" : 9.21414790
           },
           "southwest" : {
              "lat" : 45.50122050,
              "lng" : 9.197628699999999
           }
        },