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

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

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

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

  • 国家:荷兰
  • 行政区域级别_1:北荷兰

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

    如果我对“阿姆斯特丹,北荷兰,荷兰”进行地理编码,我会得到以下结果:
  • 国家:荷兰
  • 行政区域级别_1:北荷兰
  • 行政区域级别_2:阿姆斯特丹
  • 地点:阿姆斯特丹

  • 在这里,我开始不理解结果。为什么阿姆斯特丹被列为行政区域级别 2 和地方?也许有一个更高的同名政府机构?但是好的,阿姆斯特丹是本地,因此是城市。哪个是对的。

    如果我对“Anton de Komplein 150, 1102 CW Amsterdam, Noord-Holland, Nederland”进行地理编码,我会得到以下结果:
  • 国家:荷兰
  • 行政区域级别_1:北荷兰
  • 行政区域级别_2:阿姆斯特丹
  • 地点:阿姆斯特丹-Zuidoost
  • sublocality_level_1:阿姆斯特丹-Zuidoost

  • 现在我真的不明白。
  • 这里是两次提到的阿姆斯特丹-Zuidoost
  • 为什么这里的地方是“阿姆斯特丹-Zuidoost”?这不是城市......我会假设“阿姆斯特丹”将是地点,而“阿姆斯特丹-Zuidoost”将是 sublocality_level_1。

  • 有人可以解释我应该如何解释结果吗?

    最佳答案

    我看过你的例子,我相信这些是应该报告给谷歌的数据问题。

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

    “阿姆斯特丹,北荷兰省,荷兰”的请求
    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"
        ]
    }
    

    所以在这一点上,荷兰语版本的翻译似乎不正确,我们有英语的“阿姆斯特丹政府”和荷兰语的“阿姆斯特丹”。这是一个数据问题。顺便说一句,您可以在这里看到行政区域 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”谷歌方面。

    引用局部性组件。在 Google 数据库中,Amsterdam-Zuidoost 被定义为地点真的很奇怪。我可以看到它,如屏幕截图所示,它看起来像一个子区域:

    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

    但是,如果您在 Geocoder 工具中检查此功能,它会明确指出这是一个局部性功能:

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

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

    我建议按照 Google map 帮助中心向 Google 数据团队发送反馈:

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

    希望我的回答能解开你的疑惑!

    关于google-maps - 从地理编码结果中获取城市 Google Maps Api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376079/

    相关文章:

    javascript - 点击事件到多个谷歌地图路线

    javascript - Google Maps API 街景显示灰色

    css - 样式化 Google map 信息窗口

    javascript - 如何在没有 onClick 函数的情况下将 php 变量值传递给 javascript var 变量?

    php - 如何从 php 中的谷歌地图转换纬度和经度的任何地址?

    javascript - 谷歌地图标记过滤器与聚类

    android - keystore 证书的 SHA-1 指纹

    javascript - 谷歌地图设置新的标记位置和平移

    javascript - 在初始化时全屏渲染谷歌地图

    javascript - 通过缩放调整自定义图像标记的大小 - Google Maps API v3