Google Maps API - Multiple keywords in place searches

前端 未结 6 2087
青春惊慌失措
青春惊慌失措 2021-02-08 19:58

Is it possible search multiple individual keywords in one place search request using Google Maps JavaScript API v3?

In the Google Places API documentation it states that

6条回答
  •  盖世英雄少女心
    2021-02-08 20:21

    It looks like the answer is "no" (at least at the present time, you could request an enhancement on the issue tracker.

    A work around would be to send three separate queries, one for each keyword. Should be OK for 3 keywords, at some point you will run into the query rate limit.

      var request = {
        location: pyrmont,
        radius: 500,
        keyword: 'theater'
      };
      infowindow = new google.maps.InfoWindow();
      var service = new google.maps.places.PlacesService(map);
      service.nearbySearch(request, callback);
      var request2 = {
        location: pyrmont,
        radius: 500,
        keyword: 'gym'
      };
      var service2 = new google.maps.places.PlacesService(map);
      service2.nearbySearch(request2, callback);
      var request3 = {
        location: pyrmont,
        radius: 500,
        keyword: 'tacos'
      };
      var service3 = new google.maps.places.PlacesService(map);
      service3.nearbySearch(request2, callback);
    

    proof of concept

    code snippet:

    var map;
    var infowindow;
    
    function initialize() {
      var pyrmont = new google.maps.LatLng(-33.8665433, 151.1956316);
    
      map = new google.maps.Map(document.getElementById('map-canvas'), {
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        center: pyrmont,
        zoom: 15
      });
    
      var request = {
        location: pyrmont,
        radius: 500,
        keyword: 'theater'
      };
      infowindow = new google.maps.InfoWindow();
      var service = new google.maps.places.PlacesService(map);
      service.nearbySearch(request, callback);
      var request2 = {
        location: pyrmont,
        radius: 500,
        keyword: 'gym'
      };
      var service2 = new google.maps.places.PlacesService(map);
      service2.nearbySearch(request2, callback);
      var request3 = {
        location: pyrmont,
        radius: 500,
        keyword: 'tacos'
      };
      var service3 = new google.maps.places.PlacesService(map);
      service3.nearbySearch(request2, callback);
    }
    
    function callback(results, status) {
      if (status == google.maps.places.PlacesServiceStatus.OK) {
        for (var i = 0; i < results.length; i++) {
          createMarker(results[i]);
        }
      } else alert("Places request failed: " + status);
    }
    
    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);
      });
    }
    
    google.maps.event.addDomListener(window, 'load', initialize);
    html,
    body,
    #map-canvas {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    
    

提交回复
热议问题