单击 POI 时获取谷歌地图上的 placeId

2024-03-15

我在我的网站上使用 Google Maps JS V3 API。当用户搜索某个地点时,我可以通过 placeId 使用 getDetails 。当用户单击 POI 时,我想执行相同的操作。但是,当用户单击 POI 而不是使用搜索框时,我似乎找不到获取此 placeId 的方法。

我已经研究了好几天了,但没有找到任何接近的东西。

我遇到了这个功能请求,我想知道是否真的没有办法通过 POI 点击来获取 placeId:

任何帮助表示赞赏,谢谢!


Google 没有提供任何记录的 API 方法来通过点击 POI 来获取地点 ID。但是,我能够使用反向地理编码获取地点 ID。

首先,我们可以通过这里描述的方法获取POI的坐标堆栈溢出答案 https://stackoverflow.com/questions/24234106/how-to-get-a-click-event-when-a-user-clicks-a-business-place-on-the-map

其次,您可以使用 getPosition() 方法中的坐标来调用地理编码方法来检索地址组件和地点 ID。

这是一个工作JSFiddle http://jsfiddle.net/cynx/7nd9tsa7/

function initialize() {
  var mapOptions = {
    zoom: 14,
    center: new google.maps.LatLng(38.8862447, -77.02158380000003),
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map_canvas'),
    mapOptions);

  geocoder = new google.maps.Geocoder;

  //keep a reference to the original setPosition-function
  var fx = google.maps.InfoWindow.prototype.setPosition;

  //override the built-in setPosition-method
  google.maps.InfoWindow.prototype.setPosition = function() {

    //this property isn't documented, but as it seems
    //it's only defined for InfoWindows opened on POI's
    if (this.logAsInternal) {
      google.maps.event.addListenerOnce(this, 'map_changed', function() {
        var map = this.getMap();

        //the infoWindow will be opened, usually after a click on a POI
        if (map) {

          //trigger the click
          google.maps.event.trigger(map, 'click', {
            latLng: this.getPosition()
          });
        }
      });
    }
    //call the original setPosition-method
    fx.apply(this, arguments);
  };

  google.maps.event.addListener(map, 'click', function(e) {
    //alert('clicked @' + e.latLng.toString())
    geocoder.geocode({
      'location': e.latLng
    }, function(results, status) {
      if (status === google.maps.GeocoderStatus.OK) {
        if (results[0]) {

          alert('place id: ' + results[0].place_id);


        } else {
          console.log('No results found');
        }
      } else {
        console.log('Geocoder failed due to: ' + status);
      }
    });

  });
}

google.maps.event.addDomListener(window, 'load', initialize);
html,
body,
#map_canvas {
  margin: 0;
  height: 100%;
}
<div id="map_canvas"></div>
<script src="https://maps.googleapis.com/maps/api/js?callback=initialize" async defer></script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单击 POI 时获取谷歌地图上的 placeId 的相关文章

随机推荐