5

Skonfigurowałem Mapę Google przy użyciu interfejsu API w wersji 3. Mapa ma wiele znaczników z dołączonymi infoboxami. Szukam ustawienia pola wyszukiwania poza mapą, aby użytkownik wprowadził adres, a następnie zwrócił najbliższe znaczniki w oparciu o odległość (np. Wyszukiwanie promienia).Google Maps API - Promień wyszukiwania znaczników za pomocą Miejsc?

Z dokumentacji API myślę, że muszę korzystać z usług Miejsc. Czy ktoś może wskazać mi właściwy kierunek?

+0

You Only musisz użyć interfejsu API Miejsc, jeśli szukasz wyników z Interfejs API Miejsc. Jeśli chcesz zwrócić własne markery, musisz to zaimplementować za pomocą Google Maps API v3. – geocodezip

+0

Jak wygląda Twój istniejący kod? – geocodezip

Odpowiedz

14

Aby wykonać wyszukiwanie za pomocą promienia za pomocą interfejsu API, należy użyć metody Geometry Librarygoogle.maps.geometry.spherical.computeDistanceBetween do obliczenia odległości między każdym znacznikiem a zakodowanym wynikiem z adresu. Jeśli ta odległość jest mniejsza od żądanego promienia, pokaż znacznik, w przeciwnym razie ukryj go.

kod

zakłada:

  1. tablicę google.maps.Markers zwane gmarkers
  2. google.maps.Map przedmiot zwany mapa

    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

Powiązane problemy