Wyszukiwanie i prezetacja POI (punktów użyteczności publicznej)
Mapgo api umożliwia wyszukiwanie i prezentowanie na mapie punktów użyteczności publicznej z bazy ponad 130 000 obiektów np. bankomaty,apteki,restauracje,hotele etc. Punkty te w dalszej części opisu będziemy określać jako POI. POI są pogrupowane w 19 kategorii i 105 podkategorii. Pełna lista kategorii i podkategorii znajduje się w tabeli poniżej.
| Kategoria | ID |
|---|---|
| Stacja paliw | 1010 |
| Restauracja | 1510 |
| Bar | 1515 |
| Fast Food | 1520 |
| Hotel | 2010 |
| Schronisko | 2015 |
| Agroturystyka/Kwatery | 2020 |
| Camping | 2025 |
| Zwolnij | 2310 |
| Parking naziemny | 2510 |
| Parking podziemny | 2515 |
| Warsztat samochodowy | 3010 |
| Wulkanizacja | 3015 |
| Myjnia samochodowa | 3020 |
| Dealer samochodów | 3025 |
| Wypożyczalnia samochodów | 3030 |
| Bankomat | 3510 |
| Placówka banku | 3515 |
| Centrum konferencyjne | 4015 |
| Centrum targowe | 4010 |
| Firma | 4025 |
| Centrum handlowe | 4510 |
| Hipermarket | 4515 |
| Sklep | 4526 |
| Zabytek | 7020 |
| Jaskinia | 4930 |
| Jezioro/Zbiornik wodny | 4910 |
| Klif | 4935 |
| Las/Bór/Puszcza | 4915 |
| Przełęcz | 4925 |
| Szczyt | 4920 |
| Centrum kultury | 5030 |
| Kasyno | 5045 |
| Kino | 5010 |
| Kręgielnia | 5040 |
| Muzeum | 5035 |
| Opera | 5020 |
| Sala koncertowa | 5025 |
| Teatr | 5015 |
| Biblioteka | 5515 |
| Szkoła wyższa | 5510 |
| Kościół rzymskokatolicki | 5710 |
| Inny ośrodek religijny | 5730 |
| Centrum sportu/rekreacji | 6055 |
| Kort tenisowy | 6025 |
| Lotnisko sportowe | 6050 |
| Pole golfowe | 6030 |
| Stadion/Boisko | 6015 |
| Tor wyścigowy | 6035 |
| Dworzec kolejowy | 6510 |
| Międzynarodowy port lotniczy | 6520 |
| Krajowy port lotniczy | 6515 |
| Terminal promowy | 6525 |
| Przeprawa promowa | 6530 |
| Punkt poboru opłat drogowych | 6545 |
| Przejście graniczne | 6535 |
| Stacja metra | 6540 |
| Informacja turystyczna | 7010 |
| Punkt widokowy | 7015 |
| Ogród botaniczny | 7040 |
| Park Narodowy | 7025 |
| Zarząd Parku Narodowego | 7030 |
| Park/Skwer miejski | 7035 |
| Przystań żeglarska/wioślarska | 6040 |
| Zoo | 7045 |
| Administracja | 7510 |
| Ambasada | 7515 |
| Poczta | 7520 |
| Policja | 7525 |
| Sąd | 7530 |
| Apteka | 8010 |
| Szpital | 8015 |
| Weterynarz | 8020 |
| Biurowiec | 4020 |
| Market budowlany | 4520 |
| Planetarium/Obserwatorium | 5520 |
| Cmentarz | 5745 |
| Cerkiew prawosławna | 5715 |
| Protestancki ośrodek religijny | 5720 |
| Żydowski ośrodek religijny | 5725 |
| Basen/Kąpielisko | 6010 |
| Wyciąg narciarski/Kolej linowa | 6045 |
| Lodowisko | 6020 |
| Dworzec autobusowy | 6505 |
| Port | 6550 |
| Nurkowanie | 6060 |
| Klub/Dyskoteka | 5050 |
| Przychodnia lekarska | 8025 |
| Sanatorium | 8030 |
| Straż Pożarna | 7535 |
| Kwiaciarnia | 4530 |
| Księgarnia | 4535 |
| Klasztor/Opactwo | 5750 |
| Park rozrywki | 5055 |
| Stadnina koni | 7050 |
| Atrakcja turystyczna | 7055 |
| Hotspots | 9010 |
| Kawiarenka Internetowa | 9020 |
| Salon GSM | 9030 |
| Pomnik Przyrody | 4945 |
| Przedszkole | 5525 |
| Szkoła Podstawowa | 5530 |
| Gimnazjum | 5535 |
| Szkoły Średnie | 5540 |
| Supermarket | 4540 |
POI możemy wyszukiwać na dwa sposoby
- wyszukujemy POI mieszczące się w oknie mapy
- wyszukujemy POI najbliższe do danego punktu na mapie
W celu wysłania zapytania o POI używamy funkcji queryPoi. Funkcja ta ma 2 argumenty :
- obiekt MapgoPoiQuery - zawierający parametry zapytania
- nazwę funkcji która będzie uruchomiona po odebraniu danych o POI, argumentem tej funkcji będzie obiekt z listą POI
Obiekt zapytania o POI MapgoPoiQuery ma następujące zmienne:
type - typ zapytania : 0 - znajdź najbliższe do danego punktu na mapie, 1 - znajdź w oknie mapy
minx,miny,maxx,maxy - współrzędne geograficzne lewego górnego i prawego dolnego rogu prostokąta w którym chcemy szukać POIe, tym prostokątem może być bieżące okno mapy
ale może to być dowolny inny obszar mapy - zmienne te ustawiamy tylko jeśli szukamy POI w oknie mapy
lon,lat - współrzędne geograficzne punktu wokół którego szukamy najbliższych POI - zmienne te ustawiamy tylko gdy szukamy POI najbliższych do punktu
idcat - identyfikator kategorii POI (z Tabeli 1), możemy podać kilka identyfikatorów kategorii oddzielonych przecinkiem np. "15,20,25" - wtedy zostaną znalezione POI z wszystkich podanych kategorii
idsubcat - identyfikator podkategorii - identyfikator podkategorii POI (z Tabeli 1.) możemy podać kilka identyfikatorów podkategorii oddzielonych przecinkiem np. "1010,1510,1515" - wtedy zostaną znalezione POI z wszystkich podanych podkategorii
cnt - ilość zwracanych w odpowiedzi POI w przypadku wyszukiwania najbliższego POI np. jeśli chcemy znaleźć 5 najbliższych POI wokół punktu na mapie to cnt = 5
query - ciąg znaków identyfikujący zapytanie o POI - dla szukania POI wstawiamy "POI_QUERY"
Przykład kodu dla wyszukiwania POI najbliższych do danego punktu na mapie:
//tworzymy obiekt zapytania o POI var pq=new MapgoPoiQuery(); //ustalamy typ wyszukiwania dla szukania najbliższych pq.type=0; //ustalamy współrzędne punktu wokół którego szukamy pq.lon=21.011339; pq.lat=52.230427; //ustalamy podkategorię POI - stacje benzynowe pq.idsubcat="1010"; //określamy ile najbliższych POI ma zostać znalezione pq.cnt=10; //określamy typ zapytania pq.query="POI_QUERY"; //wysyłamy zapytanie o POI mapobject.queryPoi(pq,afterPoiFind); //funkcja odbierająca odpowiedź z listą znalezionych POI function afterPoiFind(resp_obj){ //tu możemy dodać funkcje jakie chcemy uruchamiać po odebraniu odpowiedzi }
Przykład kodu dla wyszukiwania POI w zadanym prostokątnym obszarze mapy:
//tworzymy obiekt zapytania o POI var pq=new MapgoPoiQuery(); //ustalamy typ wyszukiwania dla szukania w zadanym prostokącie mapy pq.type=0; //ustalamy współrzędne lewego górnego i prawego dolnego rogu prostokąta w jakim szukamy pq.minx=20.956208; pq.miny=52.263808; pq.maxx=21.044408; pq.maxy=52.293472; //ustalamy podkategorię POI - stacje benzynowe pq.idsubcat="1010"; //określamy typ zapytania pq.query="POI_QUERY"; //wysyłamy zapytanie o POI mapobject.queryPoi(pq,afterPoiFind); //funkcja odbierająca odpowiedź z listą znalezionych POI function afterPoiFind(resp_obj){ //tu możemy dodać funkcje jakie chcemy uruchamiać po odebraniu odpowiedzi }
Na zapytanie o POI otrzymujemy obiekt odpowiedzi zawierający następujące zmienne (zmienna resp_obj w funkcji afterPoiFind):
state - status odpowiedzi, przyjmuje wartości : -1 - bład wyszukiwania POI, 0 - znaleziono POIe
resp - tekstowy identyfikator typu odpowiedzi, przyjmuje wartość "POI_RESP"
recss - tablica z listą POI, elementami tej tablicy są obiekty reprezentujące dane i lokalizację każdego POI na mapie, obiekty te zawierają następujące zmienne:
- id - unikalny identyfikator POI, liczba całkowita
- dist - odległość w metrach od punktu wokół którego szukamy (jeśli szukamy POI w zadanym prostokącie mapy to dist = 0 )
- x - długość geograficzna współrzędnej lokalizacji POI
- y - szerokość geograficzna współrzędnej lokalizacji POI
- iconid - identyfikator ikony reprezentującej POI - używamy do zbudowania url obrazka do ikony POI
- w - wysokość ikony POI
- h - szerokość ikony POI
- nazwa - nazwa POI
W funkcji uruchamianej po znalezieniu POI np. u nas afterPoiFind możemy dodać POI na mapę:
function afterPoiFind(resp_obj){ //tworzymy tablicę dla ikon dodawanych na mapę var object_list=new Array(); //ustawiamy katalog bazowy z ikonami reprezentującymi POIe var basepoidir="http://www.mapgo.pl/mapgoapi/poiicons/"; //w pętli dodajemy kolejne POI do listy ikon dodawanych do mapy for (var i=0;i<poilist.recss.length;i++){ var icon1=0; //tworzymy obiekt ikony icon1=new MapgoIcon(); //wstawiamy w opis ikony nazwę POI icon1.descr=poilist.recss[i].nazwa; //wstawiamy w id ikony id POI icon1.id=poilist.recss[i].id; //budujemy url obrazka reprezentującego POI icon1.image=basepoidir+poilist.recss[i].iconid+".png"; //ustalamy wysokość obrazka ikony icon1.width=poilist.recss[i].w; //ustalamy szerokość obrazka ikony icon1.height=poilist.recss[i].h; //ustalamy szerokość tooltipa icon1.tip_width=180; //ustalamy wysokość tooltipa icon1.tip_height=130; //ustalamy przesunięcie ikony w osi x tak żeby środek obrazka był //w miejscu lokalizacji POI na mapie icon1.icon_offx=-1*(icon1.width/2); //ustalamy przesunięcie ikony w osi y tak żeby środek obrazka był //w miejscu lokalizacji POI na mapie icon1.icon_offy=-1*(icon1.height/2); //ustalamy współrzędne geograficzne ikony icon1.lon=poilist.recss[i].x; icon1.lat=poilist.recss[i].y; //dodajemy ikonę do listy ikon object_list.push(icon1); } //dodajemy warstwę z ikonami POI na mapę mapobject.addIconsToMap(object_list,"pois",posmap,3,20,false,true); }
Uwaga!
Po najechaniu na ikonę danego POI na mapie informacja o POI (adres,godziny otwarcia etc.) do tooltipa jest na bieżąco wczytywana z serwera. Dlatego ważne jest przypisanie do ikony identyfikatora POI:
icon1.id=poilist.recss[i].id;
Bez tego nie pokaże się w tooltipie opis POI.
W przypadku gdy chcemy wyszukać POIe mieszczące się w bieżącym oknie mapy kod tworzący obiekt zapytania o POI będzie następujący:
//przeliczamy współrzędne kartezjańskie lewego górnego rogu mapy na współrzędne geograficzne var lonlat1=mapobject.convertScreenToGeo(0,0); //przeliczamy współrzędne kartezjańskie prawego dolnego rogu mapy na współrzędne geograficzne var lonlat2=mapobject.convertScreenToGeo(800,600); //tworzymy obiekt zapytania o POI var pq=new MapgoPoiQuery(); //ustalamy typ wyszukiwania dla szukania w zadanym prostokącie mapy pq.type=0; //ustalamy współrzędne lewego górnego i prawego dolnego rogu prostokąta w jakim szukamy //- teraz jest to bieżące okno mapy pq.minx=lonlat1.lon; pq.miny=lonlat2.lat; pq.maxx=lonlat2.lon; pq.maxy=lonlat1.lat; //ustalamy podkategorię POI - stacje benzynowe pq.idsubcat="1010"; //określamy typ zapytania pq.query="POI_QUERY"; //wysyłamy zapytanie o POI mapobject.queryPoi(pq,afterPoiFind);

