1

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

客户要求我复制与 Android 上的 Maps 应用程序类似的行为,通常如下:

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

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

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

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

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

4

1 回答 1

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
           }
        },
于 2013-08-01T15:23:09.697 回答