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

5
我正在使用Google Maps API(https://maps.googleapis.com/maps/api/geocode/xml)对地点和地址进行地理编码。但是,结果似乎不一致。administrative_area_level_2和locality或locality和sublocality_level_1似乎重叠。但是,根据地址,重叠情况是不同的。我需要做的其中一件事情是确定城市。文档说明locality根据国家等同于城市。
如果我对"Nederland的Noord-Holland"进行地理编码,即一个省份,我会得到:
- 国家:荷兰 - administrative_area_level_1:Noord-Holland
我可以理解。一切看起来都很好...
如果我对"Nederland的Noord-Holland的Amsterdam"进行地理编码,我会得到以下结果:
- 国家:荷兰 - administrative_area_level_1:Noord-Holland - administrative_area_level_2:阿姆斯特丹 - locality:阿姆斯特丹

我开始不理解结果了。为什么阿姆斯特丹既被列为行政区域2级,又被列为地方?也许有一个同名的更高级别的政府机构?但好吧,阿姆斯特丹是地方,因此是城市。这是正确的。

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

  • 国家:荷兰
  • 行政区域1级:北荷兰省
  • 行政区域2级:阿姆斯特丹
  • 地方:阿姆斯特丹-南东
  • 子地方级别1:阿姆斯特丹-南东

现在我真的不明白了。

  1. 这里提到了阿姆斯特丹-南东两次
  2. 为什么这里的地方是“阿姆斯特丹-南东”?它不是城市...我本来以为“阿姆斯特丹”会是地方,“阿姆斯特丹-南东”会是子地方级别1。

有人能解释一下我应该如何解释这些结果吗?


文档建议结果及其格式可能因国家(以及其他因素)而异。如果您仅将其用于荷兰,那么admin_area_level_2或许是获取地区的一致方式?如果不是,那么我建议您查看其他API。 - MrUpsidown
很抱歉,情况并非如此。在许多情况下,没有 administrative_area_level_2,有时 administrative_area_level_2 与所在地不同。 - Peter de Bruijn
1个回答

7
我是一位有用的助手,可以为您进行文本翻译。以下是需要翻译的内容:

我已经看过你的示例,我认为这些是应该向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"
    ]
}

目前看来荷兰版本的翻译不正确,我们在英语中有“Government of Amsterdam”,而在荷兰语中只有“Amsterdam”。这是一个数据问题。顺便说一下,您可以在这里查看行政区域级别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

首先,您应该知道,对于街道地址级别的搜索,您将获得地址组件和本地语言格式的格式化地址,如街道地址本地化文章中所述。因此,无论我们指定英语或荷兰语,我们都将看到阿姆斯特丹作为行政区域级别2,这正是我们在第一个示例中遇到的相同数据问题,它应该在Google方面翻译为“Regering van Amsterdam”。
关于地点组件的参考。很奇怪阿姆斯特丹-南东部在Google数据库中被定义为位置。我可以在截图中看到它,它看起来像一个子位置:

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

请注意,这个pace ID是ChIJeYirmgYMxkcRRBetjCFkmyQ。我认为这也可能是谷歌数据方面的问题。
我建议按照Google Maps帮助中心的指引发送反馈给谷歌数据团队。

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

我希望我的答案澄清了你的疑虑!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接