Est-ce que quelqu'un sait utiliser l'option de recherche de rang par distance mentionnée ici? https://developers.google.com/maps/documentation/javaScript/places#places3pplace_search_requests
Liste Ceci dans les options de la demande ne semble pas fonctionner. Voici ma partie de code par rapport à ceci: p>
var request = { location: coords, //radius: 30000, keyword: ['puma, retail'], types: ['store'], rankBy: google.maps.places.RankBy.DISTANCE }; service = new google.maps.places.PlacesService(map); service.search(request, callback); function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { createMarker(results[i]); listResults(results[i]); } } }
4 Réponses :
Avoir le même problème.
Selon cette source: http://www.geocodezip.com/v3_googleex_place-search.htmlleight/a >
J'ai pu formuler la requête en tant que telle: var bounds = new google.maps.LatLngBounds();
Les «types» doivent être «Type» si vous souhaitez remplacer la valeur par une variable. Sinon, cela ne fonctionnera pas.
Vous ne pouvez pas utiliser les propriétés Radius + RankBy ensemble.
Si vous avez besoin des emplacements les plus proches, choisissez certains types et définissez la property de classeBy. p> où vous pouvez définir des placetypes comme celui-ci p> ]; p> p>
Vous ne pouvez pas utiliser les propriétés RADIUS et RIANBY.DISTANCE. Par conséquent, vous avez deux options:
1) Recherche par rayon puis triez les résultats par distance dans votre propre code. P>
Exemple: P>
var request = { location: coords, rankBy: google.maps.places.RankBy.DISTANCE, keyword: ['puma, retail'], types: ['store'] }; service = new google.maps.places.PlacesService(map); service.search(request, callback); function callback(results, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { for (var i = 0; i < results.length; i++) { d= distance(coords,results[i].latlng) if(d<rd) {createMarker(results[i]); listResults(results[i]); } } } } //Returns Distance between two latlng objects using haversine formula distance(p1, p2) { if (!p1 || !p2) return 0; var R = 6371000; // Radius of the Earth in m var dLat = (p2.lat() - p1.lat()) * Math.PI / 180; var dLon = (p2.lng() - p1.lng()) * Math.PI / 180; var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(p1.lat() * Math.PI / 180) * Math.cos(p2.lat() * Math.PI / 180) * Math.sin(dLon / 2) * Math.sin(dLon / 2); var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); var d = R * c; return d; }
C'était définitivement la bonne réponse pour moi, j'ai vécu le même problème que @jflo
Veuillez noter que sur l'API actuel, la méthode "Recherche" sur la classe Placageservice https://developers.google.com/maps/documentation/javascript/reference?hl=ity#plaService p> Vous devez choisir entre: p>
function checkRadiusDistance(place,centerLatLng,radius) {
return google.maps.geometry.spherical.computeDistanceBetween(place.geometry.location, centerLatLng) < radius;
});
Je suis dans le même bateau ... Chasser une solution.