从place_id获取Google地图链接

46

您好,使用谷歌地图API和搜索功能,我可以找到特定位置并存储其详细信息。然而,该数组不包含谷歌地图链接,该链接可以在谷歌地图上打开该位置。

通过API,我收到了place_id,作为我所感觉的,应该足以构建完整的谷歌地图链接;然而,我找不到实现此目的的方法。请问有人能够指导我如何做到这一点吗?

感谢您抽出时间阅读。


2
我正在构建一个安卓应用,碰到了同样的问题。如果下面的答案正确,必须使用返回的place_id创建另一个URL请求来获取正确的CID似乎很荒谬。 - Wayne Johnson
8个回答

157

请尝试以下语法。希望它能够帮助您。

https://www.google.com/maps/place/?q=place_id:ChIJp4JiUCNP0xQR1JaSjpW_Hms

3
简单,不需要向服务器发出其他请求。 - Mike Devenney
17
Android 上的 Google 地图显示:“不支持的链接:Google 地图无法打开此链接”。 - Kirill Kulakov
@KirillKulakov 对不起,这个问题让你不开心了.. :( - Sedat Kumcu
1
已确认可行的解决方案,2022年8月。 - slothstronaut
1
@slothstronaut 它在Android上不起作用。请查看Kirill Kulakov的答案,以获取可在台式机和移动设备上运行的替代方法。任何“query”字符串都可以使用,它不一定是地址。 - nachocab
现在你怎么做相反的呢?将页面映射到place_id? - Alper

42

以下是一条官方的 URL,可用于搜索 placeId。如果 placeId 不存在,则会回退到搜索 address

https://www.google.com/maps/search/?api=1&query=<address>&query_place_id=<placeId>

无需令牌,适用于 Android、iOS(包括 iOS 11)和 Web。


确认 - 工作正常!地址部分是必需的,但似乎没有起到任何作用。我可以输入任何东西,查找仍然有效。 - cronoklee
地址是备用的,如果谷歌地点ID被删除,谷歌地图将回退到地址。您可以通过提供无效的地点ID来尝试。 - Kirill Kulakov
最佳解决方案 - 在桌面上打开Google Maps网站,在移动设备(Android和iOS)上打开Google Maps应用程序。 - haz111
这个解决方案有效,谢谢。但是当我最终进入列表时,我会收到“混合内容”警告:Mixed Content: The page at 'https://www.google.com/maps/search/?api=1&query=%3Caddress%3E&query_place_id=ChIJoT5E1FlgLxMR1qP3Z4NRVBY' was loaded over HTTPS, but requested an insecure image 'http://www.google.com/maps/vt/data=zYuhVnS8JosXRxoH3bbPoEAByijPZHC_yNruvFpujaxqT6-OKmrS1cV2ft0f8dQNh7_HX2epahFbnLuLDgS39EdmrW_ZHt-eAfKRxDSXoaOf3BHtn5RaLfE26v_G06ja4OLDXnSi_nubeVjJPp0'. This content should also be served over HTTPS. - coccoinomane
1
根据文档 https://developers.google.com/maps/documentation/urls/get-started,需要查询。 - Henrik Bøgelund Lavstsen

12

有一种方法可以始终获取正确的URL,但需要进行额外的请求。

您可以使用place_id通过以下链接获取场所详情:https://maps.googleapis.com/maps/api/place/details/json?key=YOURAPIKEY&placeid=THEPLACEID

响应中包含一个 ['result'] ['url'] 字段,它总是打开正确的地点。 例如:https://maps.google.com/?cid=10254754059248426663


我使用那个会得到“无效请求”的错误。 - VitalyB
1
你需要使用ServerAPIKey。看看这个答案:https://dev59.com/o2Eh5IYBdhLWcg3w3mqK#24235630 - oyalhi

11

https://www.google.com/maps/place上,没有关于预期参数的文档,因此这可能只是一种解决方法(至少它目前对我有用)。

以下URL格式在大多数情况下似乎可以给出所需的结果:

https://www.google.com/maps/place/[place-name]/@[latitude],[longitude],[zoom]z/

您可以根据地名和地理位置信息创建此URL

function initialize() {
  var ac = new google.maps.places.Autocomplete(document.getElementById('pac'));
  google.maps.event.addListener(ac, 'place_changed', function() {
    var place = this.getPlace(),
      link = document.getElementById('link');
    if (!place.geometry) {
      link.textContent = '';
    } else {
      var zoom = 17,
        url = 'https://www.google.com/maps/place/' +
        encodeURIComponent(place.name) + '/@' +
        place.geometry.location.toUrlValue() + ',' +
        zoom + 'z/';
      link.href = link.textContent = url;

    }

  });
}
google.maps.event.addDomListener(window, 'load', initialize);
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3&libraries=places">
</script>
<input id="pac" />
<br/>
<a id="link"  href="" target="_blank"></a>


1

1

这需要一个 API 密钥,这对很多人来说并不理想。 - Mattwmaster58

1

我曾经遇到过一个问题,即iOS应用程序将用户重定向到从nearbysearch API返回的所需位置在谷歌地图中。

他们上面提到:

https://www.google.com/maps/place/?q=place_id:ChIJp4JiUCNP0xQR1JaSjpW_Hms

如果您在浏览器中打开此链接,它将显示在谷歌地图网站上的一个地点。
但是,如果您尝试在手机上打开此链接,则会打开谷歌地图应用程序(如果用户手机上存在该应用程序),而不是重定向到Safari。此外,谷歌地图应用程序不会显示该地点(该链接仅适用于浏览器)。
经过多种方式测试创建既能在谷歌地图应用程序又能在浏览器中工作的链接后,最好的方法是在链接中传递locationplace_id以显示一个地点。
let url = "https://www.google.com/maps/search/?api=1&query=\(placeLatitude)%2C\(placeLongitude)&query_place_id=\(placeId)"

1

没有place_id适用于我的情况

https://www.google.com/maps/search/<search term>/@<coordinates>,<zoom level>z

例子

https://www.google.com/maps/search/Jouvay+Night+Club/@40.6961111,-73.8041667,15z

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