【问题标题】:Getting Google Maps link from place_id从 place_id 获取 Google 地图链接
【发布时间】:2015-08-31 15:44:33
【问题描述】:

HeIIo,使用带有搜索功能的谷歌地图 API,我可以找到某个地方,然后存储它的详细信息。但是,该数组不包含谷歌地图链接,该链接会在谷歌地图上打开这个地方。

通过 API,我收到 place_id,我觉得应该足以构建完整的谷歌地图链接;但是,我找不到这样做的方法。任何人都可以建议我如何做到这一点。

感谢您的宝贵时间。

【问题讨论】:

  • 我在构建的 Android 应用中遇到了同样的问题。如果下面的答案是正确的,那么必须使用返回的 place_id 来创建另一个 URL 请求以获取正确的 CID 似乎很荒谬

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


【解决方案1】:

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>

【讨论】:

    【解决方案2】:

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

    您可以使用 place_id 来获取地点详细信息 https://maps.googleapis.com/maps/api/place/details/json?key=YOURAPIKEY&amp;placeid=THEPLACEID

    来自该响应的 ['result']['url'] 字段始终打开正确的位置。 例如。 https://maps.google.com/?cid=10254754059248426663

    【讨论】:

    【解决方案3】:

    您可以使用 google embed API,并将 src 作为链接: 例如:

     https://www.google.com/maps/embed/v1/place?key=YOUR_API_KEY
      &q=place_id:YOUR_PLACE_ID
    

    文档: https://developers.google.com/maps/documentation/embed/guide#place_mode

    【讨论】:

    • 这需要一个 API 密钥,这对很多人来说并不理想。
    【解决方案4】:

    试试下面的语法。希望对你有帮助

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

    【讨论】:

    • 简单,无需额外请求服务器。
    • 安卓上的谷歌地图说:Unsupported link: Google maps can't open this link
    • @KirillKulakov 对此感到抱歉.. :(
    【解决方案5】:

    这是一个官方网址,用于搜索 placeId,如果 placeId 不存在,则回退到 address

    https://www.google.com/maps/search/?api=1&amp;query=&lt;address&gt;&amp;query_place_id=&lt;placeId&gt;

    无需令牌,适用于 Android、iOS(以及 iOS 11)和网络

    【讨论】:

    • 已确认 - 效果很好!地址部分是必需的,但它似乎没有做任何事情。我可以在那里输入任何内容,并且查找仍然有效。
    • 地址是备份,如果google place ID被删除,google maps会回退到该地址。您可以通过提供无效的地点 ID 来尝试这样做
    • 最佳解决方案 - 在桌面上打开 Google 地图网站,在移动设备(Android 和 iOS)上打开 Google 地图应用程序。
    • 此解决方案有效,谢谢,但当我最终登陆列表时,我收到“混合内容”警告:Mixed Content: The page at 'https://www.google.com/maps/search/?api=1&amp;query=%3Caddress%3E&amp;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.
    【解决方案6】:

    【讨论】:

      【解决方案7】:

      没有 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多