Google 地点详细信息经纬度坐标与跨平台地图 URL 不匹配

Posted

技术标签:

【中文标题】Google 地点详细信息经纬度坐标与跨平台地图 URL 不匹配【英文标题】:Google Place Details Lat/Long coordinates not matching cross platform Maps URLs 【发布时间】:2018-09-10 20:38:28 【问题描述】:

我已使用 Google Place details API 获取地点详细信息,其中包括地点的纬度/经度坐标。

当我使用通用跨平台 Maps URL 启动 Google 地图时,它无法识别该地点。

例如,

https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJbf8C1yFxdDkR3n12P4DkKt0&key=XXXXXXXX

返回包含以下位置数据的地点详细信息:

 
  .....
  "geometry": 
    "location": 
      "lat": 27.1750151,
      "lng": 78.0421552
    ,
    "viewport": 
      "northeast": 
        "lat": 27.1770292,
        "lng": 78.04537599999999
      ,
      "southwest": 
        "lat": 27.16897280000001,
        "lng": 78.0388188
      
    
  ,
  .....
  "name": "Taj Mahal",
  "place_id": "ChIJbf8C1yFxdDkR3n12P4DkKt0",

  .....

但是,当用于创建带有direction map action 的Maps URL 时,此数据不会在目标字段中给出正确的位置。

谷歌地图网址:https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0

目的地未显示为地点。仅使用 lat/lng 或地址,如下所示。

正确/预期的结果如下。看看目的地。

更新

问题似乎在于 PlaceID 与地图 URL 中的纬度/经度坐标不匹配。 Place Details API 提供的 lat/lng 似乎不一致。

以下网址有效

https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552,15z&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0

27.1750151,78.0421552,15z 不是来自Place details API 的坐标。 PlaceDetails API 返回的 lat/lng 是 27.1750151,78.0421552

,15z 有一个区别,我相信它是zoom levels。

【问题讨论】:

这个地点 ID 是什么?你是怎么第一次得到它的?您对您提供的请求有何期望?提供示例很好,但也请让我们知道“出了什么问题”。 PlaceID 已使用 developers.google.com/maps/documentation/javascript/examples/… 获取。我添加了截图。希望现在很清楚。 你的问题是? 【参考方案1】:

destination 的文档提到 该值可以是地名、地址或以逗号分隔的纬度/经度坐标。

如果您输入坐标,我想它只是进行反向地理编码并显示相应的地址。所以你可以输入地名,它就会起作用。

https://www.google.com/maps/dir/?api=1&destination=Taj+Mahal&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0

【讨论】:

我知道它适用于地名。即使您不提供 PlaceID,它也可以使用 google.com/maps/dir/?api=1&destination=Taj+Mahal。但我们需要给出确切的名称,可能会产生歧义。 那又怎样?那你为什么不把你得到的适当的地名和地名作为destination 参数传递呢? 我需要它与纬度/经度。我只存储 lat/lng 和 placeID 以供以后与 Google Maps URL 一起使用……它不采用 lat/lng。请检查其他答案。 是的,那你为什么不把地名也存储起来呢?而不是使用一些无证的hack。【参考方案2】:

在提供 lat/lngs 时,destination 参数似乎完全胜过destination_place_id 参数,从而导致坐标上的反向地理编码。在以下示例 URL 中,我使用的地点 ID 为 ChIJj61dQgK6j4AR4GeTYWZsKWw,它对应于加利福尼亚州山景城的 Googleplex,为 destination_place_id,泰姬陵的纬度/经度为 destination;请注意 Googleplex 查询被忽略,并执行反向地理编码以获取印度的地址:

https://www.google.com/maps/dir/?api=1&destination=27.1750151,78.0421552&destination_place_id=ChIJj61dQgK6j4AR4GeTYWZsKWw

因此,解决方法是不使用 lat/lng 作为destination 参数。我已经使用各种字符串(地名、地址、乱码)作为该参数进行了测试,destination_place_id 似乎取代了它,这是所需的行为。当仅使用 .(句点) 作为通用值时,会提供地点名称和地址:

https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJj61dQgK6j4AR4GeTYWZsKWw

https://www.google.com/maps/dir/?api=1&destination=.&destination_place_id=ChIJbf8C1yFxdDkR3n12P4DkKt0

【讨论】:

以上是关于Google 地点详细信息经纬度坐标与跨平台地图 URL 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

如何查询经纬度坐标

如何通过经纬度坐标获取附近的地址信息?

如何找到一个地点的经纬度

手机百度地图如何查看准确的经纬度?

高德地图怎样实现实时定位,得到当前地点的坐标,位置

高德地图怎样实现实时定位,得到当前地点的坐标,位置