【问题标题】:How to use lat and long to get Place_id from Google Places如何使用 lat 和 long 从 Google Places 获取 Place_id
【发布时间】:2018-01-29 21:31:03
【问题描述】:

我正在尝试返回一系列商店的 Google 评论。因此,每家商店都有一个唯一的 placeid,我首先需要找到它才能返回评论。我看到的所有教程都向我展示了如何在自动完成字段上使用 getPlace() 来获取 placeid,但我只有一个具有 lat 和 long 属性的模型,需要使用它们来获取 place id。

谷歌给出的例子here

google.maps.places.Autocomplete(input).getPlace();

仅用于自动完成。我希望我可以使用 getPlace() 并以某种方式插入 lat 和 long 以返回 placeid。

谢谢。

【问题讨论】:

    标签: javascript google-maps google-places-api


    【解决方案1】:

    使用 PlaceService .nearbySearch 与您的坐标。它将返回多个结果,您要查找的结果很可能是最接近您输入坐标的结果。

    service = new google.maps.places.PlacesService(map);
    var request = {
      location: searchLoc,
      radius: '50'
    };
    service.nearbySearch(request, function callback(results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
        var bounds = new google.maps.LatLngBounds();
        var minDistance = Number.MAX_VALUE;
        var closestMarker = null;
        for (var i = 0; i < results.length; i++) {
          var marker = createMarker(results[i]);
          var distance = google.maps.geometry.spherical.computeDistanceBetween(searchLoc, marker.getPosition());
          if (distance < minDistance) {
            minDistance = distance;
            closestMarker = marker;
          }
        }
        closestMarker.setMap(map);
        map.setCenter(closestMarker.getPosition());
      }
    });
    

    proof of concept fiddle

    代码 sn-p:

    function initialize() {
      var map = new google.maps.Map(
        document.getElementById("map_canvas"), {
          center: new google.maps.LatLng(37.4419, -122.1419),
          zoom: 13,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });
      var infowindow = new google.maps.InfoWindow();
      var NeimanMarcus = new google.maps.LatLng(32.768863635112375, -117.16740846633911);
      var Nordstrom = new google.maps.LatLng(32.76856592648975, -117.1685242652893);
    
      service = new google.maps.places.PlacesService(map);
      findNearestPlace(Nordstrom, service, map, infowindow);
      findNearestPlace(NeimanMarcus, service, map, infowindow);
    
    }
    google.maps.event.addDomListener(window, "load", initialize);
    
    function findNearestPlace(searchLoc, service, map, infowindow) {
      var request = {
        location: searchLoc,
        radius: '50'
      };
      service.nearbySearch(request, function callback(results, status) {
        if (status === google.maps.places.PlacesServiceStatus.OK) {
          var bounds = new google.maps.LatLngBounds();
          var minDistance = Number.MAX_VALUE;
          var closestMarker = null;
          for (var i = 0; i < results.length; i++) {
            var marker = createMarker(results[i], map, infowindow);
            var distance = google.maps.geometry.spherical.computeDistanceBetween(searchLoc, marker.getPosition());
            if (distance < minDistance) {
              minDistance = distance;
              closestMarker = marker;
            }
          }
          closestMarker.setMap(map);
          map.setCenter(closestMarker.getPosition());
        }
      });
    }
    
    function createMarker(place, map, infowindow) {
      var placeLoc = place.geometry.location;
      var marker = new google.maps.Marker({
        position: place.geometry.location
      });
    
      google.maps.event.addListener(marker, 'click', function() {
        map.setCenter(marker.getPosition());
        map.setZoom(19);
        infowindow.setContent(place.name);
        infowindow.open(map, this);
      });
      return marker;
    }
    html,
    body,
    #map_canvas {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    <script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places"></script>
    <div id="map_canvas"></div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 2018-09-06
      相关资源
      最近更新 更多