Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> google map api / pobieranie punktów w określonym promieniu, optymalizacja skryptu
qbas-s
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


posiadam prawie 3000 punktów do wyświetlenia na mapie.
Jeną z opcji jaką sobie życzy klient jest możliwość przefiltrowania markerów według promienia od wyznaczonej lokalizacji czyli np podaję, że jestem w Warszawie, wybieram promień 3km.

wszystko działa mi ładnie prócz aspektu wydajnościowego bo dla każdego punktu aktualnie wykonuję zapytanie do api:
  1. $query = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial' .
  2. '&origins=' . $origin['lat'] . ',' . $origin['lon'] .
  3. '&destinations=' . str_replace(',','.',$destination['lat']) . ',' . str_replace(',','.',$destination['lon']) .
  4. '&language=pl-PL&key=key';


po czym w instrukcji warunkowej sprawdzam sobie dystans pomiędzy punktami

  1. $output = file_get_contents($query);
  2. $output = json_decode($output);
  3.  
  4. $distance = $output->rows[0]->elements[0]->distance->value;
  5.  
  6. if ($distance < $choose_distance) {
  7. return true;
  8. }
  9. return false;


Dla prawie 3000 punktów powyższy kod wykonuje się adekwatną ilość razy.

Taki skrypt wykonuje się za długo przy takiej ilości danych, jak również wersja darmowa google api ma ograniczenie co do ilości zapytań w ciągu 24h. Jak mogę zoptymalizować ten skrypt? Czy mógłbym wysłać te wszystkie punkty w jednym zapytaniu tak abym z google dostał zwrotkę tylko z przefiltrowanymi danymi?

Ten post edytował qbas-s 3.07.2017, 12:13:10
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Mają lokalizację środka, możesz odfiltrować te punkty w PHP.
Go to the top of the page
+Quote Post
qbas-s
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


ja widzisz zapewne, odfiltrowuje je w php problem w tym, że przy 3tys punktów wykonuje 3tys zapytań do googla co nie jest najwydajniejsze, dlatego zastanawiam się czy nie mógłbym wysłać jednego zapytania ze wszystkimi puntami zamiast 3 tys.
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Odfiltrować=obliczyć dystans w PHP.
Go to the top of the page
+Quote Post
trueblue
post
Post #5





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Nie, nie obliczasz dystansu w PHP, pobierasz go, zresztą jak napisałeś, poprzez 3000 żądań do GoogleMaps API.
Jeśli masz współrzędne środka obszaru i współrzędne punktów, to dystans możesz obliczyć w PHP.
Go to the top of the page
+Quote Post
qbas-s
post
Post #6





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 28.06.2009

Ostrzeżenie: (0%)
-----


dobra załapałem (IMG:style_emoticons/default/biggrin.gif) faktycznie nie pomyślałem o tym sposobie. Obliczanie bez użycia google api. thx
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 21:54