5

J'ai configuré Google Map à l'aide de l'API v3. La carte a un certain nombre de marqueurs avec des infoboxes attachés. Je cherche à mettre en place une boîte de recherche en dehors de la carte pour que l'utilisateur saisisse une adresse, puis renvoyer les marqueurs les plus proches en fonction de la distance (comme une recherche de rayon).Google Maps API - Radius recherche de marqueurs en utilisant Places?

De la documentation de l'API, je pense que je dois utiliser les services Google Adresses. Est-ce que quelqu'un peut-il me montrer la bonne direction?

+0

Vous ne besoin d'utiliser l'API Places si vous cherchez des résultats de la e Places API. Si vous souhaitez renvoyer vos propres marqueurs, vous devez l'implémenter à l'aide de l'API Google Maps v3. – geocodezip

+0

À quoi ressemble votre code existant? – geocodezip

Répondre

14

Pour effectuer une recherche de rayon avec l'API, utilisez la méthode Geometry Librarygoogle.maps.geometry.spherical.computeDistanceBetween pour calculer la distance entre chaque marqueur et le résultat géocodé de l'adresse. Si cette distance est inférieure au rayon demandé, affichez le marqueur, sinon cachez-le.

code suppose:

  1. tableau de google.maps.Markers appelé gmarkers
  2. objet google.maps.Map appelé carte

    function codeAddress() { 
        var address = document.getElementById('address').value; 
        var radius = parseInt(document.getElementById('radius').value, 10)*1000; 
        geocoder.geocode({ 'address': address}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) { 
         map.setCenter(results[0].geometry.location); 
         var marker = new google.maps.Marker({ 
         map: map, 
         position: results[0].geometry.location 
         }); 
         if (circle) circle.setMap(null); 
         circle = new google.maps.Circle({center:marker.getPosition(), 
                radius: radius, 
                fillOpacity: 0.35, 
                fillColor: "#FF0000", 
                map: map}); 
         var bounds = new google.maps.LatLngBounds(); 
         for (var i=0; i<gmarkers.length;i++) { 
         if (google.maps.geometry.spherical.computeDistanceBetween(gmarkers[i].getPosition(),marker.getPosition()) < radius) { 
          bounds.extend(gmarkers[i].getPosition()) 
          gmarkers[i].setMap(map); 
         } else { 
          gmarkers[i].setMap(null); 
         } 
         } 
         map.fitBounds(bounds); 
    
        } else { 
         alert('Geocode was not successful for the following reason: ' + status); 
        } 
        }); 
    } 
    

example