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:
$query = 'https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial' . '&origins=' . $origin['lat'] . ',' . $origin['lon'] . '&destinations=' . str_replace(',','.',$destination['lat']) . ',' . str_replace(',','.',$destination['lon']) . '&language=pl-PL&key=key';
po czym w instrukcji warunkowej sprawdzam sobie dystans pomiędzy punktami
$output = json_decode($output); $distance = $output->rows[0]->elements[0]->distance->value; if ($distance < $choose_distance) { return true; } 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?