Wyszukiwanie opisu punktu na mapie (antygeokodowanie)
Mapgo API umożliwia znalezienie opisu punktu na mapie - taki proces nosi też nazwę antygeokodowania. Na taki opis składa się : nazwa najbliższgo odcinka ulicy/drogi, nazwa miejscowości w jakiej jest dana ulica/droga,nazwa gminy,powiatu,województwa,kod pocztowy. Do tego celu służy funkcja findPointDescr. Przykładowe wywołanie funkcji:
mapobject.findPointDescr(21.000656,52.222992,ageoListener);
gdzie kolejne parametry to:
21.000656 - długość geograficzna punktu
52.222992 - szerokość geograficzna punktu
ageoListener - nazwa funkcji nasłuchującej na wynik antygeokodowania
W wyniku wyszukiwania otrzymujemy listę 6 opisów odcinków ulic. Pierwsze 3 są to najbliższe odcinki ulic/dróg. Kolejne 3 są nieco dalszymi odcinkami ale zawsze posiadają
nazwę ulicy lub numer drogi. Zdarzają się sytuacje, że odcinki ulic/dróg na mapie nie posiadają nazwy. W przypadku 3 pierwszych opisów odcinków ulic/dróg mamy pewność że
są to najbliższe odcinki do punktu. Jednak mogą nie mieć nazwy ulicy/numeru drogi. Kolejne 3 opisy nie zawsze muszą być następnymi najbliższymi w kolejności ale zawsze
posiadają nazwę ulicy i numer drogi. W wyniku otrzymujemy obiekt zawierający następujące zmienne :
state - status antygeokodowania (0 - OK, <0 - błąd antygeokodowania gdzie kody błędów : -1000 - błędne współrzędne, -1009 - nieznany błąd)
lon - długość geograficzna współrzędnej punktu
lat - szerokość geograficzna współrzędnej punktu
list - lista 6 opisów zawierająca :
street - nazwa ulicy
roadnr - numer drogi
dist - odległość w metrach od punktu
city - nazwa miejscowości
voiw - nazwa województwa
distr - nazwa powiatu
comm - nazwa gminy
zipc - kod pocztowy
from_l - numer domu od jakiego zaczyna się numeracja po lewej stronie najbliższego odcinka ulicy
to_l - numer domu na jakim kończy się numeracja po lewej stronie najbliższego odcinka ulicy
from_r - numer domu od jakiego zaczyna się numeracja po prawej stronie najbliższego odcinka ulicy
to_r - numer domu na jakim kończy się numeracja po lewej stronie najbliższego odcinka ulicy
Uzyskanie opisu danego punktu na mapie jest możliwe także interaktywnie - przez kliknięcie punktu na mapie. W tym celu przestawiamy tryb kursora myszy funkcją setCursorMode:
mapobject.setCursorMode('ageo',ageoListener);
podając także nazwę funkcji nasłuchującej na wynik antygeokodowania (ageoListener). Od tego momentu każde kliknięcie na mapie spowoduje wyszukanie opisu klikniętego punktu i wywołanie funkcji ageoListener z wynikiem jako parametrem. Taki scenariusz jest w poniższym przykładzie:
<html> <head> <link rel="Stylesheet" href="style.css" type="text/css"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://apisat.mapgo.pl/api.php?type=incl&key=abcdef123456" type="text/javascript"></script> </head> <script type="text/javascript"> //powołujemy obiekt MapGO Api var mapobject=createMapgoObject(); //inicjujemy mapę z // - zadanym centrum : 19.500000,52.250000 // - skalą : 17 (skale 3-17) // - rozmiarem : 800x600 // - pozycją okna mapy na stronie (lewy górny róg) : 0,0 mapobject.initMap(21.000656,52.222992,5,800,600,0,0); //pokazujemy toolbar do obsługi skali i przesuwania mapy mapobject.showToolbar(); //ustalamy tryb pracy kursora myszy na antygeokodowanie - klknięcie na mapę wywoła szukanie opisu punktu //jako drugi parametr - funkcja nasłuchująca na wynik antygeokodowania mapobject.setCursorMode('ageo',ageoListener); //funkcja nasłuchująca na wynik antygeokodowania function ageoListener(ageo_ans){ var descrall="Lista najbliższych odcinków ulic/dróg:<br><br>"; if (ageo_ans.state>=0){ descrall+="lon="+ageo_ans.lon+",lat="+ageo_ans.lat+"<br><br>"; for (var i=0;i<ageo_ans.list.length;i++) descrall+=(i+1)+".<br> "+"ulica : "+ageo_ans.list[i].street+"<br>nr drogi : "+ageo_ans.list[i].roadnr+"<br>miejscowość : "+ageo_ans.list[i].city+"<br>województwo : "+ageo_ans.list[i].voiw+"<br>powiat : "+ageo_ans.list[i].distr+"<br>gmina : "+ageo_ans.list[i].comm+"<br>kod pocztowy : "+ageo_ans.list[i].zipc+"<br>odległość : "+ageo_ans.list[i].dist+"m<br><br>"; document.getElementById("point_descr").innerHTML=descrall; } } </script> <br> <div id="point_descr" style="position:relative;visibility:visible"/> <br> </html>

