从地理编码中获取城市结果Google Maps Api

时间:2017-11-19 11:01:17

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

我正在使用Google Maps API(https://maps.googleapis.com/maps/api/geocode/xml)对地点和地址进行地理编码。但是,结果似乎不一致。 administrative_area_level_2和locality或locality和sublocality_level_1似乎重叠。但是,根据地址,重叠是不同的。我需要做的一件事就是确定城市。文件说明该地区相当于一个城市,具体取决于国家。

如果我对“Noord-Holland,Nederland”进行地理编码,这是我得到的一个省:

  • 国家:荷兰
  • administrative_area_level_1:Noord-Holland

我能理解。一切似乎都很好......

如果我对“Amsterdam,Noord-Holland,Nederland”进行地理编码,我会得到以下结果:

  • 国家:荷兰
  • administrative_area_level_1:Noord-Holland
  • administrative_area_level_2:阿姆斯特丹
  • 局部性:阿姆斯特丹

在这里,我开始不理解结果。为什么阿姆斯特丹被列为administrative_area_level_2以及一个地方?也许有更高的政府机构同名?但是好的,阿姆斯特丹是当地,因此是城市。这是正确的。

如果我对“Anton de Komplein 150,1102 CW Amsterdam,Noord-Holland,Nederland”进行地理编码,我会得到以下结果:

  • 国家:荷兰
  • administrative_area_level_1:北荷兰
  • administrative_area_level_2:阿姆斯特丹
  • 局部性:阿姆斯特丹祖伊多斯特
  • sublocality_level_1:阿姆斯特丹祖伊多斯特

现在我真的不明白。

  1. 这里是阿姆斯特丹 - Zuidoost两次提到
  2. 为什么这里的地方是“Amsterdam-Zuidoost”?这不是城市...我会假设“阿姆斯特丹”将是地方,而“Amsterdam-Zuidoost”则是sublocality_level_1。
  3. 有人可以解释我应该如何解释结果吗?

1 个答案:

答案 0 :(得分:5)

我已经查看了您的示例,我认为这些是应该向Google报告的数据问题。

让我们解释一下我的发现:

阿姆斯特丹,诺德 - 荷兰,荷兰的请求

https://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam%2C%20Noord-Holland%2C%20Nederland&key=MY_API_KEY

为我返回以下地址组件

"address_components":[
    {
      "long_name":"Amsterdam",
      "short_name":"Amsterdam",
      "types":[
        "locality","political"
      ]
    },
    {
      "long_name":"Government of Amsterdam",
      "short_name":"Government of Amsterdam",
      "types":[
        "administrative_area_level_2","political"
      ]
    },
    {
      "long_name":"North Holland",
      "short_name":"NH",
      "types":[
        "administrative_area_level_1","political"
      ]
    },
    {
      "long_name":"Netherlands",
      "short_name":"NL",
      "types":[
        "country","political"
      ]
    }
  ]

请注意,administrative_area_level_2的名称为“阿姆斯特丹政府”。我知道您可能会使用荷兰语来获得结果

https://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam%2C%20Noord-Holland%2C%20Nederland&language=nl&key=MY_API_KEY

在这种情况下,我有:

{
    "long_name":"Amsterdam",
    "short_name":"Amsterdam",
    "types":[
      "locality","political"
    ]
},
{
    "long_name":"Amsterdam",
    "short_name":"Amsterdam",
    "types":[
      "administrative_area_level_2","political"
    ]
}

所以在这一点上看起来荷兰语版本没有正确翻译,我们有阿姆斯特丹政府和#39;用英语和阿姆斯特丹'在荷兰。这是一个数据问题。顺便说一句,您可以在此处查看管理区域级别2:

https://www.google.com/maps/place/Government+of+Amsterdam,+Amsterdam,+Netherlands/@52.3544136,4.7585038,11z/data=!3m1!4b1!4m5!3m4!1s0x47c63fb5949a7755:0xe4f20c148755745!8m2!3d52.3666969!4d4.8945398

第二个例子有点复杂。

https://maps.googleapis.com/maps/api/geocode/json?address=Anton%20de%20Komplein%20150%2C%201102%20CW%20Amsterdam%2C%20Noord-Holland%2C%20Nederland&key=MY_API_KEY

首先,您应该知道,对于街道地址级搜索,您将获得本地语言的地址组件和格式化地址,如localization of street addresses文章中所述。因此,我们将英语或荷兰语指定为何种语言并不重要,我们将阿姆斯特丹视为行政区域2级,这与我们在第一个示例中遇到的数据问题完全相同,应将其翻译为' Regering van Amsterdam'在谷歌方面。

参考地点组件。阿姆斯特丹 - 祖伊多斯特被定义为谷歌数据库中的地方,这真的很奇怪。我可以看到它如屏幕截图所示,它看起来像一个sublocality:

enter image description here

https://www.google.com/maps/place/Amsterdam-Zuidoost,+Netherlands/@52.2569773,4.995519,12z/data=!4m5!3m4!1s0x47c60c069aab8879:0x249b64218cad1744!8m2!3d52.3079989!4d4.9715451

但是,如果您在地理编码器工具中检查此功能,则会明确指出这是一个地点功能:

https://google-developers.appspot.com/maps/documentation/utils/geocoder/#place_id%3DChIJeYirmgYMxkcRRBetjCFkmyQ

请注意,步速ID为ChIJeYirmgYMxkcRRBetjCFkmyQ。我相信这也可能是Google方面的数据问题。

我建议您在Google地图帮助中心之后向Google数据小组发送反馈意见:

https://support.google.com/maps/answer/3094045?hl=en&ref_topic=3093612

我希望我的回答能澄清你的怀疑!