简体   繁体   中英

Get PlaceID from nearbySearch and display in a marker InfoWindow ( JS Google Maps API )

I have this query

var service = new google.maps.places.PlacesService(map);
var request = {
  location: currentLocation,
  radius: '4828.03',
  type: ['workout gyms']
};
service.nearbySearch(request, callback);

And I am able to successfully place a marker on every location, but I want to make the marker clickable such that it displays the placeID in an infoWindow when clicked. Does anyone know how I could do this?

Modified code from the related question: Place nearbySearch Callback doesn't iterate through all elements (to return place details)

function callback(results, status) {
  if (status === google.maps.places.PlacesServiceStatus.OK) {
    console.log("nearbySearch returned " + results.length + " results")
    for (var i = 0; i < results.length; i++) {
      // make a marker for each "place" in the result
      createMarker(results[i]);
    }
  } else console.log("error: status=" + status);
}


function createMarker(place) {
  var marker = new google.maps.Marker({
    map: map,
    position: place.geometry.location
  });
  google.maps.event.addListener(marker, 'click', function() {
    // display the place "name" and "place_id" in the infowindow.
    infowindow.setContent(place.name + "<br>" + place.place_id);
    infowindow.open(map, this);
  });
}

modified fiddle

生成的地图的屏幕截图

code snippet:

 function initMap() { var lng; var lat; var my_loc = new google.maps.LatLng(37.4419, -122.1419); map = new google.maps.Map(document.getElementById('map'), { center: my_loc, zoom: 10 }); geocoder = new google.maps.Geocoder(); infowindow = new google.maps.InfoWindow(); service = new google.maps.places.PlacesService(map); var request = { location: map.getCenter(), radius: 4828.03, type: ['workout gyms'] }; service.nearbySearch(request, callback); } function callback(results, status) { if (status === google.maps.places.PlacesServiceStatus.OK) { console.log("nearbySearch returned " + results.length + " results") for (var i = 0; i < results.length; i++) { var id = results[i].place_id; createMarker(results[i]); } } else console.log("error: status=" + status); } function createMarker(place) { console.log("adding place " + place.name + " loc=" + place.geometry.location.toUrlValue(6)); 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 + "<br>" + place.place_id); infowindow.open(map, this); }); } google.maps.event.addDomListener(window, "load", initMap); 
 html, body, #map { height: 100%; width: 100%; margin: 0px; padding: 0px } 
 <script src="https://maps.googleapis.com/maps/api/js?libraries=places"></script> <div id="map"></div> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM