Wyszukiwanie trasy
mapGO API umożliwia znalezienie optymalnej trasy przejazdu między dwoma punktami. Służy do tego funkcja findRoute. Parametrami tej funkcji są współrzędne startu i końca trasy oraz nazwa funkcji nasłuchującej na wynik szukania trasy. Ostatnim parametrem jest typ szukania : trasa najszybsza (wartość parametru = 1) lub najkrótsza (wartość parametru = 0). Jeśli nie podamy tego parametru domyślnie będziemy szukać trasy najszybszej. Przykładowe wywołanie funkcji:
//szukamy trasy najszybszej mapobject.findRoute(21.002452,52.224565,20.976397,52.235481,routeListener,1);
Wynikiem wyszukiwania jest narysowanie trasy na mapie oraz obiekt z opisem trasy (marszrutą) przekazywany jako parametr funkcji nasłuchującej. Obiekt z opisem trasy zawiera listę tzw. punktów nawigacyjnych czyli miejsc gdzie
kierowca powinien wykonać manewr (np. skręć w lewo). Każdy element tej listy ma następujące zmienne :
ds - nazwa ulicy w jaką wjeżdżamy po manewrze
m - typ manewru - liczba całkowita oznaczająca manewr np. skręć w prawo
d - długość w metrach bieżącego odcinka drogi jakim jechaliśmy do manewru (nie jest to całkowita długość przejechanej do tej pory trasy - to trzeba wyliczyć sumując kolejne długości odcinków)
t - czas w sekundach przejazdu bieżącego odcinka drogi jakim jechaliśmy do manewru
Opis manewrów :
1 - jedź prosto
2 - skręć w lewo
3 - skręć w prawo
4 - trzymaj się lewej strony
5 - trzymaj się prawej strony
6 - zawróć
8 - cel osiągnięty
9 - wjazd na rondo
10 - zjazd z ronda pierwszym zjazdem
11 - zjazd z ronda drugim zjazdem
12 - zjazd z ronda trzecim zjazdem
13 - zjazd z ronda czwartym zjazdem
14 - zjazd z ronda piątym zjazdem
15 - zjazd z ronda szóstym zjazdem
16 - zjazd z ronda siódmym zjazdem
17 - zjazd z ronda ósmym zjazdem
W poniższym przykładzie znajdujemy trasę i w funkcji nasłuchującej geoListener wypisujemy całą marszrutę:
<html> <xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v"/> <style type="text/css">v\:* { behavior: url(#default#VML);}</style> <script src="http://api.mapgo.pl/api.php?type=incl&key=abcdef123456" type="text/javascript"></script> <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(); //wyszukujemy trasę mapobject.findRoute(21.002452,52.224565,20.976397,52.235481,routeListener); //funkcja nasłuchująca na odpowiedź wyszukiwania trasy function routeListener(route_resp){ //w alldescr zapamiętujemy całkowity opis trasy var alldescr="<b>Marszruta :</b><br>"; //w allodl przechowujemy dotychczas przejechaną długość trasy var allodl=0; //dodajemy do opisu kolejne odcinki trasy for (var i=0;i<route_resp.np.length;i++){ allodl+=route_resp.np[i].d; alldescr+=makeManDescr(route_resp.np[i].ds,route_resp.np[i].m,route_resp.np[i].d,allodl,(i+1))+'<br>'; } //dodajemy do mapy iknony początku i końca trasy wraz z ich opisem addTrasaIcons(21.002452,52.224565,20.976397,52.235481,"start trasy","koniec trasy"); //wstawiamy w odpowiedni div opis trasy var descrr=document.getElementById("route_descr"); document.getElementById("route_descr").innerHTML=alldescr; } //funkcja zwraca opis tekstowy pojednyczego odcinka trasy zależnie od typu manewru function makeManDescr(street,mantype,odl,calkodl,nr){ var mandescr=""; var odl1=odl; var calkodl1=calkodl; var temp=0; if (odl>=10){ odl1=Math.round((odl/1000)*100)/100; } if (calkodl>=10){ calkodl1=Math.round((calkodl/1000)*100)/100; } //zależnie od typu manewru wybieramy opdowiedni opis tekstowy manewru switch(mantype){ case 1: if (odl<10) mandescr="jedź prosto przez "+odl+"m"; else mandescr="jedź prosto przez "+odl1+"km"; break; case 2: if (odl<10) mandescr="skręć w lewo po przejechaniu "+odl+"m"; else mandescr="skręć w lewo po przejechaniu "+odl1+"km"; break; case 3: if (odl<10) mandescr="skręć w prawo po przejechaniu "+odl+"m"; else mandescr="skręć w prawo po przejechaniu "+odl1+"km"; break; case 4: if (odl<10) mandescr="trzymaj się lewej strony przez "+odl+"m"; else mandescr="trzymaj się lewej strony przez "+odl1+"km"; break; case 5: if (odl<10) mandescr="trzymaj się prawej strony przez "+odl+"m"; else mandescr="trzymaj się prawej strony przez "+odl1+"km"; break; case 6: if (odl<10) mandescr="zawróć po przejechaniu "+odl+"m"; else mandescr="zawróć po przejechaniu "+odl1+"km"; break; case 7: mandescr="punkt pośredni osiągnięty"; break; case 8: mandescr="cel osiągnięty"; break; case 9: if (odl<10) mandescr="wjazd na rondo po przejechaniu "+odl+"m"; else mandescr="wjazd na rondo po przejechaniu "+odl1+"km"; break; case 10: mandescr="zjazd z ronda pierwszym zjazdem"; break; case 11: mandescr="zjazd z ronda drugim zjazdem"; break; case 12: mandescr="zjazd z ronda trzecim zjazdem"; break; case 13: mandescr="zjazd z ronda czwartym zjazdem"; break; case 14: mandescr="zjazd z ronda piątym zjazdem"; break; case 15: mandescr="zjazd z ronda szóstym zjazdem"; break; case 16: mandescr="zjazd z ronda siódmym zjazdem"; break; case 17: mandescr="zjazd z ronda ósmym zjazdem"; break; } if (street=='' && mantype<10) street='(brak nazwy)'; var sep=","; if (street=='' && mantype>=10) sep=""; if (calkodl<10) return "<b>"+street+"</b>"+","+mandescr+",przejechano już "+calkodl+"m"; else return "<b>"+street+"</b>"+","+mandescr+",przejechano już "+calkodl1+"km"; } //funkcja dodaje do mapy ikony startu i końca trasy function addTrasaIcons(slon,slat,elon,elat,sdescr,edescr){ var objs=new Array(); //tworzymy obiekt ikony startu trasy var sobj=new MapgoIcon(); sobj.lon=slon; sobj.lat=slat; sobj.descr=sdescr; sobj.width=46; sobj.height=34; sobj.image='http://www.mapGO.pl/portal/gfx/start.png'; sobj.icon_offx=-23; sobj.icon_offy=-34; objs[0]=sobj; //tworzymy obiekt ikony końca trasy var eobj=new MapgoIcon(); eobj.lon=elon; eobj.lat=elat; eobj.descr=edescr; eobj.width=46; eobj.height=34; eobj.image='http://www.mapGO.pl/portal/gfx/meta.png'; eobj.icon_offx=-23; eobj.icon_offy=-34; objs[1]=eobj; //dodajemy ikony do mapy mapobject.addIconsToMap(objs,'ikony_trasa',false); } </script> <br><br> <div id="route_descr"></div> </html>

