如果谷歌地图api地址组件没有提供它,如何获取城市名称

时间:2018-03-16 10:27:34

标签: angular google-maps-api-3 google-geocoding-api

我正在使用angular-maps处理Google地理编码API。

我发现对于地图上的某些地方,我们没有获得实际的城市名称,而是在地址组件的locality部分中获取了子地区名称。

请查看下面这种情况的示例。我得到Kesklinna部分的值locality,其中城市名称应为Tallinn

[
   {
      "long_name":"1",
      "short_name":"1",
      "types":[
         "street_number"
      ]
   },
   {
      "long_name":"Suur Rannavärav",
      "short_name":"Suur Rannavärav",
      "types":[
         "route"
      ]
   },
   {
      "long_name":"Kesklinn",
      "short_name":"Kesklinn",
      "types":[
         "political",
         "sublocality",
         "sublocality_level_1"
      ]
   },
   {
      "long_name":"Kesklinna",
      "short_name":"Kesklinna",
      "types":[
         "locality",
         "political"
      ]
   },
   {
      "long_name":"Harju maakond",
      "short_name":"Harju maakond",
      "types":[
         "administrative_area_level_1",
         "political"
      ]
   },
   {
      "long_name":"Estonia",
      "short_name":"EE",
      "types":[
         "country",
         "political"
      ]
   },
   {
      "long_name":"10414",
      "short_name":"10414",
      "types":[
         "postal_code"
      ]
   }
]

如果我们将标记放在离这个地方大约100米的地方,我会得到正确的城市Tallinn

[
   {
      "long_name":"10",
      "short_name":"10",
      "types":[
         "street_number"
      ]
   },
   {
      "long_name":"Rannamäe tee",
      "short_name":"Rannamäe tee",
      "types":[
         "route"
      ]
   },
   {
      "long_name":"Kesklinn",
      "short_name":"Kesklinn",
      "types":[
         "political",
         "sublocality",
         "sublocality_level_1"
      ]
   },
   {
      "long_name":"Tallinn",
      "short_name":"Tallinn",
      "types":[
         "locality",
         "political"
      ]
   },
   {
      "long_name":"Harju maakond",
      "short_name":"Harju maakond",
      "types":[
         "administrative_area_level_1",
         "political"
      ]
   },
   {
      "long_name":"Estonia",
      "short_name":"EE",
      "types":[
         "country",
         "political"
      ]
   },
   {
      "long_name":"10133",
      "short_name":"10133",
      "types":[
         "postal_code"
      ]
   }
]

这是谷歌地图地理编码器上的某种错误吗?或者这是预期的吗? 如何从标记位置确定正确的城市名称?

1 个答案:

答案 0 :(得分:0)

这听起来像是一个数据问题。在Google地图中查看塔林的边界

https://www.google.com/maps/place/Tallinn,+Estonia/@59.420911,24.7681033,12.89z/data=!4m5!3m4!1s0x46929499df5616bf:0x400b36d18fc6270!8m2!3d59.4369608!4d24.7535747

第一个地址显然位于塔林的多边形

https://google-developers.appspot.com/maps/documentation/utils/geocoder/#q%3DSuur%2520Rannav%25E4rav%25201%252C%2520Kesklinna%252C%2520Estonia

我试图找到一个名为Kesklinna的地方,但它不存在

https://google-developers.appspot.com/maps/documentation/utils/geocoder/#q%3DKesklinna%252C%2520Estonia

只有具有名称Kesklinn的sublocality构成塔林市的一部分

https://www.google.com/maps/place/Kesklinn,+Tallinn,+Estonia/@59.4827351,24.6316448,11z/data=!3m1!4b1!4m5!3m4!1s0x469294b4763fb4c7:0x500b36d18fc70f0!8m2!3d59.4268518!4d24.7595564

这表明地址'SuurRannavärav1,Kesklinna,Estonia'已被打破。

https://www.google.com/maps/place/Suur+Rannav%C3%A4rav+1,+Kesklinn,+Kesklinna,+10414+Harju+maakond,+Estonia/@59.4435038,24.7454318,17z/data=!3m1!4b1!4m5!3m4!1s0x46929364f1572a67:0x998f646719ef7e67!8m2!3d59.4435038!4d24.7476205

您可以使用地图右下角的发送反馈链接向Google报告错误数据。

作为一种解决方法,您可以使用反向地理编码以及地址和结果类型位置的坐标

NDK r10

这将按预期返回'爱沙尼亚塔林'。

我希望这有帮助!