Skrypt PHP zawężanie wyników względem odległości

0

Witam,
zamierzam zlecić napisanie skryptu który umożliwia wyszukiwanie użytkowników (baza danych MySQL) w określonej przez nas odległości.

Czy taki sposób jaki przedstawie poniżej będzie efektywny, czy istnieją lepsze rozwiązania?

Pobieramy współrzędne za pomocą Google API. Otrzymujemy je w postaci, np. "51.645294,20.258789".

Polska zawiera się w przedziale:
-szerokość: 49.001788 54.835854
-długość: 14.122267 24.145571

Krańcowe części Polski wyznaczają boki prostokąta (blikiego kwadratu, bo kraj ma rozpiętość jakieś dł.680km i sz.650km).
Dzielimy ten prostokąt na sto równych części względem poziomu jak i pionu - razem 10 000 części.
Numerujemy je kolejno od dolnego lewego rogu w prawą stronę (od dolnego ponieważ wartość równików przebiegających przez Polskę rośnie od dołu do góry).
Tak uzyskujemy sto cyfr w każdym wierszu (np liczba 101 wyznaczała by początek drugiego wiersza, a liczba 4322 wyznaczała by 43 wiersz i 22 kolumnę w siatce prostokątów pokrywających powierzchnię Polski).

Już na etapie rejestracji mamy więc przyszeregowanie lokalizacji użytkownika, do jednego z 10 000 części prostokąta obejmującego Polskę swoimi bokami. Innymi słowy każdy użytkownik dostaje przy rejestracji zmienną od 1 do 10 000. Każdy prostokąt w tej siatce ma wymiar 6,8km x 6,5km.
A obliczmy to dla przykładu np. "51.645294,20.258789":

szerokość:
(54.835854 - 49.001788) - 100
(51.645294 - 49.001788) - x
=>
(51.645294 - 49.001788)*100 / (54.835854 - 49.001788) = 45.311554583 => 45
Mamy więc dwie pierwsze cyfry z liczby 45xx która jest jedną z 10 000 prostokątów.

długość:
(24.145571 - 14.122267) - 100
(20.258789 - 14.122267) - x
=>
(20.258789 - 14.122267)*100 / (24.145571 - 14.122267) = 61.2225469765 => 61
Mamy dwie ostatnie cyfry xx61 naszej liczby na siatce dzielącej Polskę na 10 000 równych prostokątów.

"51.645294,20.258789" te współrzędne wskazują, że punk geolokalizacyjny leży w obrębie 4561 prostokąta (6,8km x 6,5km).

Teraz jeśli chcemy znaleŹć użytkowników oddalonych o powiedzmy 15km: dzielimy te 15km na 6,5km (pomijamy że drugi bok jednego z 10 000 prostokątów na wymiar 6,8km i przyjmujemy, że są to kwadraty o wymiarach 6,5km x 6,5km).

15/6,5=2,3076 (zaokrąglamy do pełnych cyfer) => 2 - w promieniu tylu kwadratów szukamy użytkowników.

Jeśli mamy określony prostokąt "4561" i promień "2" wyznaczającą promień to zbiór tych prostokątów będzie wyglądał tak:

4759 4760 4761 4762 4763
4659 4660 4661 4662 4663
4559 4560 4561 4562 4563
4459 4460 4461 4462 4463
4359 4360 4361 4362 4363

Dzielimy liczbę 4561 na dwie części 45|61. Od pierwszej wyznaczającej tysiące tworzymy ciąg od [45 - 2] do [45 + 2], następnie do każdej z liczb tworzących ten ciąg "dostawiamy" liczby ciągu od [61 - 2] do [61 + 2].

Wyciągamy pozycje z tymi wartościami z bazy MyQSL i mamy wyniki.
Myślę że taki skrypt jest nieobciążający dla serwera.
Wiem że jest niedokładny - szuka pozycji (użytkowników) w obrębie "x" kilometrowego kwadratu, ale taki błąd jest dopuiszczalny w moim przypadku.

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