【问题标题】:Is it possible for Google Places API to return one single object instead of an array of objects when querying?Google Places API 在查询时是否可以返回一个对象而不是一组对象?
【发布时间】:2018-02-12 18:06:19
【问题描述】:

我正在使用 Google Places API,我想知道是否可以只返回一个最接近的结果。在下面的示例中,我可以返回 1 公里半径内的所有健身房,这很好,但如果我要返回最近的警察局或医院,我只想知道最近的有没有办法做到这一点.似乎 API 正在返回半径内的所有对象,并且无法更改。我似乎找不到任何突出显示此问题的文档,并且我所做的任何尝试仍然返回该区域的所有位置。

 function GymReport(){

  // Gets the latitude and longitude of a location searched by a user
  $('.search_latitude').val(marker.getPosition().lat());
  $('.search_longitude').val(marker.getPosition().lng());

 var Lat = marker.getPosition().lat();
 console.log(Lat);

 var Long = marker.getPosition().lng();
 console.log(Long);

 var location = {lat: Lat, lng: Long};

   var service = new google.maps.places.PlacesService(map);
   service.nearbySearch({
       location: location,
       radius: 1000,
       type: ['gym']
     }, callback);
    }

回调类

 function callback(results, status) {

  if (status === google.maps.places.PlacesServiceStatus.OK) {
      if(marker)
            marker.setMap(null)
     for (var i = 0; i < results.length; i++) { 
          createMarker(results[i]);<-- This calls the function that will create the markers for the array of results from the API.
        }
  }
}

【问题讨论】:

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


    【解决方案1】:

    请注意,您可以按突出或按距离对附近地点搜索的结果进行排序。默认情况下,它按突出顺序排列。您可以在代码中使用rankBy 参数按距离排序:

    rankBy - 指定返回结果时使用的排名方法。默认为突出。请注意,当 rankBy 设置为 DISTANCE 时,您必须指定位置,但不能指定半径或边界。

    来源:https://developers.google.com/maps/documentation/javascript/3.exp/reference#PlaceSearchRequest

    一旦你得到按距离排序的结果,只需从数组中获取第一个元素,这是最近的地方。看看我的示例代码

    var map;
    var infowindow;
    
    function initMap() {
      var pyrmont = {lat: -33.867, lng: 151.195};
    
      map = new google.maps.Map(document.getElementById('map'), {
        center: pyrmont,
        zoom: 15
      });
    
      infowindow = new google.maps.InfoWindow();
      var service = new google.maps.places.PlacesService(map);
      service.nearbySearch({
        location: pyrmont,
        rankBy: google.maps.places.RankBy.DISTANCE,
        type: ['gym']
      }, callback);
    }
    
    function callback(results, status) {
      if (status === google.maps.places.PlacesServiceStatus.OK) {
        //Get the first result, it's the closest one
        createMarker(results[0]);
      }
    }
    
    function createMarker(place) {
      var placeLoc = place.geometry.location;
      var marker = new google.maps.Marker({
        map: map,
        position: place.geometry.location
      });
    
      google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(place.name);
        infowindow.open(map, this);
      });
    }
    #map {
      height: 100%;
    }
    html, body {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    <div id="map"></div>
    <script src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU&libraries=places&callback=initMap" async defer></script>

    我希望这会有所帮助!

    【讨论】:

    • 完美修复。感谢您回复我!
    猜你喜欢
    • 2020-04-08
    • 2019-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2020-11-02
    • 2020-05-06
    • 2013-12-01
    • 2018-02-22
    相关资源
    最近更新 更多