Znajdowanie adresów
mapGOAPI umożliwia znajdowanie współrzędnych geograficznych adresów (inaczej -
geokodowanie). Aby znaleźć adres musimy podać : miejscowość,ulicę i numer domu.
W sytuacji gdy szukamy współrzędnych miejscowości podajemy tylko nazwę
miejscowości (w takiej sytuacji dostaniemy współrzędne środka miejscowości).
Do znajdowania adresu używamy funkcji findAddress. Jako parametry
podajemy kolejno nazwę miejscowości oraz ulicę i numer domu:
mapobject.findAddress('warszawa','korfantego 2',geoListener);
Wywołanie funkcji findAddress nie zmienia mapy - nie ustala nowego
centrum,skali etc. Musimy to zrobić sami. W odpowiedzi otrzymujemy współrzędne adresu (patrz niżej), których używamy do ustalenia centrum mapy.
Bardzo istotnym parametrem funkcji findAddress jest funkcja nasłuchująca na odpowiedź ze znalezionym adresem - w naszym
przypadku geoListener. Jest nazwa funkcji, która zostanie wywołana z wynikiem wyszukiwania adresu jako parametrem. Wynik wyszukiwania występuje w
postaci obiektu i zawiera zmienne :
state - status wyszukiwania adresu
X - długość geograficzna znalezionego adresu
Y - szerokość geograficzna znalezionego adresu
city_name - nazwa znalezionej miejscowości
woj_name - nazwa województwa znalezionej miejscowości
pow_name - nazwa powiatu znalezionej miejscowości
gmin_name - nazwa gminy znalezionej miejscowości
street_name - nazwa znalezionej ulicy
house_nr - znaleziony numer domu
city_list - listę znalezionych miejscowości o tej samej nazwie
street_list - listę ulic o tej samej nazwie
Przy szukaniu adresu możemy mieć 4 typy odpowiedzi :
- błąd wyszukiwania adresu - wtedy w odpowiedzi mamy tylko zmienną state z kodem błędu
- znaleziono adres (lub miejscowość) - w odpowiedzi mamy zmienne state,X,Y,city_name,woj_name,pow_name,street_name,house_nr
- znaleziono wiele miejscowości o tej samej nazwie (np. jest kilkadziesiąt miejscowości w Polsce o nazwie Nowa Wieś)- w odpowiedzi mamy zmienną city_list
- znaleziono wiele ulic o tej samej nazwie - w odpowiedzi mamy zmienną street_list
Najprostszy przykład z wyszukiwaniem adresu wygląda następująco:
//funkcja uruchamiana po otrzymaniu wyniku szukania adresu function geoListener(geo_ans){ //sprawdzamy czy w odpowiedzi jest lista miejscowości if (geo_ans.city_list){ alert('lista miejscowości'); } else //sprawdzamy czy w odpowiedzi jest lista ulic if (geo_ans.street_list){ alert('lista ulic'); } else //sprawdzamy czy odpowiedź zawiera znaleziony adres if (geo_ans.state && geo_ans.state==8) alert('znalazłem adres'); } //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(19.500000,52.250000,17,800,600,0,0); //podajemy dane adresowe i nazwę funkcji nasłuchującej na wynik wyszukiwania mapobject.findAddress('Warszawa','Korfantego 15',geoListener);
W powyższym przykładzie mamy przypadek z dokładnym adresem - nie musimy wybierać miejscowości ani ulicy. Status odpowiedzi =8 co oznacza że znaleźliśmy współrzędne adresu.
Statusy w odpowiedzi mają następujące wartości :
1 - nie znaleziono miejscowości o podanej nazwie
2 - znaleziono wiele miejscowości o podanej nazwie
3 - znaleziono jedną miejscowość ale nie ma planu adresowego więc współrzędne wskazują na środek miejscowości
4 - znaleziono jedną miejscowość ale nie znaleziono ulicy - współrzędne wskazują na środek miejscowości
5 - znaleziono wiele ulic o podanej nazwie
6 - znaleziono miejscowość i ulicę w miejscowości ale nie ma numerów na tej ulicy więc współrzędne wskazują na początek ulicy
7 - znaleziono miejscowość i ulicę ale znaleziono najbliższy numer do szukanego
8 - znaleziono dokładnie adres (miejscowość, ulicę i dokładny numer domu)
-1001 - podano zbyt krótką nazwę miejscowości
-1002 - podano zbyt krótką nazwę ulicy
Jeśli będziemy szukac adresu "Kraków bracka 5" dostaniemy w odpowiedzi listę miejscowości (są 2 miejscowości o nazwie "Kraków" w Polsce). Lista zawiera obiekty które mają następujące zmienne :
city_name - nazwa znalezionej miejscowości
woj_name - nazwa województwa znalezionej miejscowości
pow_name - nazwa powiatu znalezionej miejscowości
gmin_name - nazwa gminy znalezionej miejscowości
W naszej funkcji geoListener wypiszemy na stronę informacje o kolejnych miejscowościach z listy:
//funkcja uruchamiana po otrzymaniu wyniku szukania adresu function geoListener(geo_ans){ //wypisujemy do przeglądarki informacje o kolejnych znalezionych miejscowościach : nazwę, województwo,powiat i gminę for (var i=0;i<geo_ans.city_list.length;i++) document.write(geo_ans.city_list[i].city_name+','+geo_ans.city_list[i].woj_name+','+geo_ans.city_list[i].pow_name+','+geo_ans.city_list[i].gmin_name); } //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(19.500000,52.250000,17,800,600,0,0); //podajemy dane adresowe i nazwę funkcji nasłuchującej na wynik wyszukiwania mapobject.findAddress('Kraków','Bracka 5',geoListener);
Żeby przejść do szukania ulicy po znalezieniu wielu miejscowości musimy najpierw wybrac właściwą miejscowość. Do wyboru miejscowości i ponownego szukania adresu służy funkcja chooseCity. Jako parametr przyjmuje numer z listy miejscowości (0..N-1, N - długość listy city_list). W naszym przypadku wybieramy Kraków w woj. małopolskim czyli pozycję 0:
//funkcja uruchamiana po otrzymaniu wyniku szukania adresu function geoListener(geo_ans){ //wybieramy pierwszy Kraków z listy i szukamy ponownie adresu if (geo_ans.city_list) mapobject.chooseCity(0); else if (geo_ans.state){ alert('Znalazłem adres'); //centrujemy mapę na znaleziony adres mapobject.centerTo(geo_ans.X,geo_ans.Y,3); } } //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(19.500000,52.250000,17,800,600,0,0); //podajemy dane adresowe i nazwę funkcji nasłuchującej na wynik wyszukiwania mapobject.findAddress('Kraków','Bracka 5',geoListener);
Podobnie postępujemy w przypadku gdy mamy listę ulic. Jeśli szukamy adresu "Warszawa Bra 12" w odpowiedzi otrzymamy listę ulic zaczynających się na "Bra". :
//funkcja uruchamiana po otrzymaniu wyniku szukania adresu function geoListener(geo_ans){ //wypisujemy do przeglądarki nazwy kolejnych znalezionych ulic for (var i=0;i<geo_ans.city_list.length;i++) document.write(geo_ans.street_list.street_name); } //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(19.500000,52.250000,17,800,600,0,0); //podajemy dane adresowe i nazwę funkcji nasłuchującej na wynik wyszukiwania mapobject.findAddress('Warszawa','Bra 5',geoListener);
Wybieramy właściwą ulicę funkcją chooseStreet podając jako parametr numer z listy ulic (0..N-1, N - długość listy street_list) :
//funkcja uruchamiana po otrzymaniu wyniku szukania adresu function geoListener(geo_ans){ //wybieramy ulicę o nazwie "Bracka" i szukamy adresu ponownie if (geo_ans.street_list) mapobject.chooseStreet(3); else if (geo_ans.state){ alert('Znalazłem adres'); //centrujemy mapę na znaleziony adres mapobject.centerTo(geo_ans.X,geo_ans.Y,3); } } //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(19.500000,52.250000,17,800,600,0,0); //podajemy dane adresowe i nazwę funkcji nasłuchującej na wynik wyszukiwania mapobject.findAddress('Warszawa','Bra 5',geoListener);
Poniżej przykład z całkowitą obsługą procesu geokodowania. W pole tekstowe wpisujemy adres "NAZWA MIEJSCOWOŚCI,ULICA NR_DOMU" np. "Warszawa,Oczki 2". W przypadku gdy w odpowiedzi otrzymamy listę miejscowości, generowana jest lista z danymi kolejnych miejscowości. Kliknięcie na daną miejscowość powoduje wybór tej miejscowości i szukanie adresu. Jeśli w odpowiedzi otrzymamy listę ulic wtedy generowana jest lista nazw ulic. Kliknięcie na daną nazwę powoduje wybór ulicy i ponowne wyszukanie adresu. Jeśli w odpowiedzi otrzymamy znaleziony adres, centrujemy mapę na jego współrzędnych. Żeby przejść przez cały proces wyszukiwania wystarczy spróbować znaleźć adres "Kraków Bra 5".
<html> <head> <script src="http://apisat.mapgo.pl/api.php?type=incl&key=abcdef123456" type="text/javascript"></script> <xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/> <style type="text/css">v\:* { behavior: url(#default#VML);}</style> </head> <body> <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(19.500000,52.250000,17,800,600,0,0); //pokazujemy toolbar do obsługi skali i przesuwania mapy mapobject.showToolbar(); //funkcja nasłuchująca na wynik geokodowania function geoListener(geo_ans){ //jeśli w odpowiedzi otrzymamy listę miejscowości to generujemy listę danych o miejscowościach do wyboru if (geo_ans.city_list){ //tworzymy html listy miejscowości var list_txt=makeCityList(geo_ans.city_list); var lists=document.getElementById("listy"); //wstawiamy w div listę miejscowości lists.innerHTML=list_txt; //pokazujemy div z listą lists.style.visibility='visible'; } else //jeśli w odpowiedzi otrzymamy listę ulic to generujemy listę nazw ulic do wyboru if (geo_ans.street_list){ //tworzymy html listy miejscowości var list_txt=makeStreetList(geo_ans.street_list); var lists=document.getElementById("listy"); //wstawiamy w div listę miejscowości lists.innerHTML=list_txt; //pokazujemy div z listą lists.style.visibility='visible'; } else //jeśli znaleźliśmy adres to ustaw centrum mapy na współrzędne adresu oraz dodaj ikonę oznaczającą ten punkt if (geo_ans.state && geo_ans.state>2){ document.getElementById("listy").style.visibility='hidden'; alert('Znalazłem adres'); var object_list=new Array(); //tworzymy obiekt ikony var icon1=new MapgoIcon(); //podajemy opis obiektu - pojawi się w dymku po najechaniu kursorem myszy na obiekt icon1.descr=document.getElementById('adres').value; //ustawiamy współrzędne ikony na współrzędne adresu icon1.lon=geo_ans.X; icon1.lat=geo_ans.Y; object_list.push(icon1); //dodajemy ikonę do mapy mapobject.addIconsToMap(object_list,"address_layer"); //ustalamy centrum mapy na współrzędne adresu i ustalamy skalę na 5 mapobject.centerMap(geo_ans.X,geo_ans.Y,5); } } //funkcja tworząca listę miejscowości,kliknięcie na każdy element listy powoduje ponowne szukanie adresu z wybraną miejscowością function makeCityList(city_list){ var outstr=''; for (var i=0;i<city_list.length;i++){ outstr+='<a href="javascript:void(0);" onclick="mapobject.chooseCity('+i+');">'+city_list[i].city_name+',woj. '+city_list[i].woj_name+'</a><br>'; } return outstr; } //funkcja tworząca listę ulic do wyboru, kliknięcie na dany element listy powoduje ponowne szukanie adresu z wybraną ulicą function makeStreetList(street_list){ var outstr=''; for (var i=0;i<street_list.length;i++){ outstr+='<a href="javascript:void(0);" onclick="mapobject.chooseStreet('+i+');">'+street_list[i].street_name+'</a><br>'; } return outstr; } //funkcja uruchamia szukanie adresu function search(address){ mapobject.removeLayerByName("address_layer"); if (address.length==0) return; var city=address.substring(0,address.indexOf(",")); var str_no=address.substring(address.indexOf(",")+1); //szukamy adresu podając jako parametry dane adresowe oraz nazwę funkcji nasłuchującej na wynik geokodowania mapobject.findAddress(city,str_no,geoListener); } </script> <br> Wpisz szukany adres (np. Warszawa,oczki 12)<br> <input id="adres" type="text" size="120" NAME="adres"><input type="button" onclick="search(document.getElementById('adres').value)" value="Szukaj" ID="Button1" NAME="Button1"> <br> <div id="listy" style="position:relative;visibility:visible"/> <br> </body> </html>

