Wyszukiwanie z promieniem Google Maps

0

Cześć, mam taki problem. Muszę wyszukać rekordy w bazie które dostępne są w promieniu 100 km od wpisanej lokalizacji. Załóżmy że mamy jakieś ogłoszenie. Podczas dodawania ogłoszenia zapisywana jest w bazie lokalizacja (Nazwa i place_id z google maps)
W formularzu wyszukiwania też jest wyszukiwarka z google maps więc jeśli bez promienia to nie ma problemu, wystarczyłoby porównać place_id z pola z place_id w bazie ale musi szukać w promieniu 100km, jak można to osiągnąć?

Dzięki

0

Musisz użyć Geometry Library https://developers.google.com/maps/documentation/javascript/geometry
google.maps.geometry.spherical.computeDistanceBetween

Wyszukany punkt podajesz do funkcji i sprawdzasz czy miesci sie w danym promieniu. Nie wiem tylko jakie sa koszty requestow bo teraz google platne porobili

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);
    }
  });
}
0

do funkcji wrzucam to co wyszukuję - tak? Tylko w jaki sposób połączyć to z ogłoszeniami zapisanymi w bazie - tak aby wyświetlić te, które mieszczą się w danym obszarze

0

Dodajc ogloszenie dodajesz punkt LAT i LONG.
Nastepnie wyszukuje ktos wedlug: Miasto, data, kod pocztowy jakies kryteria i do tego zaznacza ze w promieniu 10 km od wojego punktu.

  1. Szukajacy podaje swoja lokalizacje (adres, kod pocztowy cokowliek)
  2. Zamieniasz lokalizacje szukajacego na punkt LAT,LONG
  3. Wybeirasz dane z bazy wedlug kryteriów jakie wtbrał szukajacy wiec zostana ci z bazy zwrocone wyniki z lokalizacja ogloszen powiedzmy ze wybralo ci 237 ogloszen
  4. teraz w petli przelatujesz te ogloszenia i na podstawie punktow lokalizacji z ogloszenia patrzysz czy punkt szukajacego zawiera sie w lokalizacji czy jest powyzej niej.
  5. Jesli jest powyzej to wycinasz z tablicy rezultatow dane ogloszenie
  6. reszte co zostaje wyswietlasz uzytkownikowi

Polecam korzystac z goodla api tylko do okreselnai punktu lokalizacji szukajacego i podczas gdy dodajesz ogloszenie z adresem gdzie wtedy API maps google zwraca vi punkty. A juz funkcja obliczajaca czy dane punkty sa w danym obszarze czy poza nim zosatw po stronie serwera bo tak to sprawdzaja kazdy punkt zleci ci za duzo czasu na kazdy request pojedynczy czy powiedzmy nawet masowy jakis no i kasa leci za requesty tez.

Funkcje do obliczania punktow w php odnosnie geoloklizacji znajdziesz na internecie

1 użytkowników online, w tym zalogowanych: 0, gości: 1