5

Ich habe eine Google Map mit API v3 eingerichtet. Die Karte enthält eine Reihe von Markierungen mit angehängten Infoboxen. Ich suche ein Suchfeld außerhalb der Karte, damit der Benutzer eine Adresse eingeben kann und dann die nächsten Markierungen basierend auf der Entfernung (z. B. eine Umkreissuche) zurückgegeben werden.Google Maps API - Radius Suche nach Marken mit Places?

Aus der API-Dokumentation muss ich die Places-Dienste verwenden. Kann mir jemand in die richtige Richtung zeigen?

+0

Sie nur Sie müssen die Places API verwenden, wenn Sie nach Ergebnissen von th suchen e Orte API. Wenn Sie Ihre eigenen Markierungen zurückgeben möchten, müssen Sie dies über das Google Maps API v3 implementieren. – geocodezip

+0

Wie sieht Ihr bestehender Code aus? – geocodezip

Antwort

14

Um eine Umkreissuche mit der API durchzuführen, verwenden Sie die Methode Geometry Librarygoogle.maps.geometry.spherical.computeDistanceBetween, um den Abstand zwischen jeder Markierung und dem geocodierten Ergebnis von der Adresse zu berechnen. Wenn diese Entfernung kleiner als der angeforderte Radius ist, zeigen Sie den Marker an, andernfalls verstecken Sie ihn.

Code geht davon aus:

  1. Array von google.maps.Markers gmarkers genannt
  2. google.maps.Map Objekt namens Karte

    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