如何从谷歌地图的经纬度获取place_id?

13

我可以使用这个链接来获取地点 ID,但问题是这是基于位置搜索的。我想使用可拖动标记获取place_id,所以无法使用上面的链接。我正在移动Google地图上的标记,那么我如何在地图上获取place_id。

通过marker.getPosition(),我们可以获得纬度和经度。所以我想通过经纬度获得place_id。请告诉我如何做到。

latitude=marker.getPosition().lat();               
longitude=marker.getPosition().lng();
3个回答

24
使用google.maps.Geocoder进行反向地理编码,如此处所述:https://developers.google.com/maps/documentation/javascript/examples/geocoding-reverse
您将收到包含results [1] .place_id的数据。
var geocoder = new google.maps.Geocoder;

latitude=marker.getPosition().lat();               
longitude=marker.getPosition().lng();
var latlng = {lat: parseFloat(latitude), lng: parseFloat(longitude)};

geocoder.geocode({'location': latlng}, function(results, status) {
    if (status === google.maps.GeocoderStatus.OK) {
      if (results[1]) {
        console.log(results[1].place_id);
      } else {
        window.alert('No results found');
      }
    } else {
      window.alert('Geocoder failed due to: ' + status);
    }
  });

4
我想知道: 为什么你要使用第二个结果而不是 results[0] - Merc

10

您可以使用Geocoder API发送请求,或者直接向网络服务发送HTTP请求。

您的示例请求:

https://maps.googleapis.com/maps/api/geocode/json?latlng=纬度,经度&key=您的API密钥

然后,您可以使用JavaScript中的JSON.parse()函数轻松解析JSON对象。


3

我有一个新的解决这个问题的方法。在这里,我使用了谷歌HTTP服务来获取基于经纬度的位置的全部信息。您只需要在URL中传递纬度和经度以及您的API密钥(例如:latlng=21.1497409, 79.08747970000002 & key=YOUR API KEY)。以下是我的ExampleService类中的GET服务:

 getService(url) {

    return this.http.get(url).map((data: any) => data.json())

}

您可以将此代码放在任何位置,并从需要位置数据的组件中调用以下服务:

this._exampleService.getService("https://maps.googleapis.com/maps/api/geocode/json?latlng=21.1497409, 79.08747970000002&key=YOUR API KEY").subscribe(getplaceData => {
            var placeDataDest: any;
            placeDataDest = getplaceData;
            console.log("i got place id yeee " + placeDataDest['results'][0]['place_id']);
            console.log("i got place details yeee " + placeDataDest['results']);
        });

希望您会觉得这篇文章有用


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