Jakiś czas temu pisałem o tworzeniu mapy z urzędami pocztowymi w Warszawie. Ostatnio zostałem zapytany o to jak wygląda sprawa sprawdzania odpowiedzi z serwisu Google Maps czy adres został przetłumaczony na współrzędne poprawnie. Czasem Google nie potrafi znaleźć precyzyjnego adresu, ale wie gdzie jest ulica o tej nazwie. Albo może być niejednoznaczne dopasowanie do nazw i może być ich kilka.

Zdjęcie z SXC
Rozwiązanie jest następujące – zamiast korzystać z funkcji getLatLang należy użyć getLocations. Pierwsza jako argumenty bierze łańcuch z nazwą do znalezienia a drugim jest funkcja, która zostanie wywołana po przetworzeniu odpowiedzi. Będzie ona wywołana z argumentem, który jest obiektem reprezentującym punkt (GLatLng). Niestety nic nie wiemy czy jest to dobra odpowiedź i czy jedyna. Jeżeli użyje się getLocations, to funkcja callback dostanie jako argument tablicę która zawiera wszystkie dopasowane miejsca i ich szczegółowe dane. Między innymi jest tam Accuracy, które mówi czy adres został dopasowany dokładnie czy punkt jest tylko przybliżeniem. Stałe GGeoAddressAccuracy pozwają określić jak dokładnie udało się dopasować adres (do poziomu ulicy, miasta czy może tylko państwa?).
Szczegółowo struktura przekazywana do callbacku przez getLocations opisana jest w dokumentacji.
A jak podjeść do problemu, że adres nie został rozpoznany? W funkcji callback możemy wywołać getLocations jeszcze raz, jeśli dokładność nie jest zadowalająca, z przetworzonym w jakiś sposób adresem. Oczywiście – jeśli jako nowy callback ustawimy tę samą funkcję to musimy zapewnić, że w każdej iteracji adres do wyszukania jest przekształcany, tak, że w końcu uda się znaleźć zadowalającą dokładność albo liczyć iteracje, aby nie wpędzić się w nieskończoną pętlę.
Ponieważ ostatnio bardzo byłem zajęty kończeniem jednego większego projektu, w ramach odświeżenia umysłu postanowiłem moją mapkę z urzędami pocztowymi odświeżyć – w pierwszym podejściu robiąc geolokację, zakładałem, że odpowiedź z Google jest dokładna. Nie zawsze tak jest. Dlatego na stronie z mapką urzędów pocztowych teraz:
- zaznaczone są urzędy pocztowe, które zostały zlokalizowane w sposób przybliżony
- urzędy nieczynne (informacja ze stron Poczty) też są zaznaczone
- nie tylko Warszawa, ale też urzędy z Opola i Wrocławia są teraz wizualizowane
Jest szansa, że wkrótce pojawią się kolejne miasta – wygląda na to, że zaczynam kolejny projekt, który będzie dość intensywny. Może jako jak będę chciał na chwilę uciec od Railsów, znowu trochę skrobię strony Poczty Polskiej ? :)
PS
Poczta Polska nadal nie ma na swoich stronach żadnych mapek z urzędami….
Popularity: 25% [?]



