dr inż. Waldemar Izdebski 1,2 mgr inż. Andrzej Bielasty 2 Propozycja standaryzacji usługi lokalizacji adresu Numery adresowe są jednym z najprostszych elementów danych przestrzennych. Niemniej jednak są one bardzo ważnym elementem, ponieważ pozwalają w łatwy sposób na lokalizację różnych obiektów i zjawisk w odniesieniu do sytuacji terenowej. Niniejsza publikacja ma na celu zaproponowanie pewnego rozwiązania ogólnego, zwanego usługą lokalizacji 3, które powinno znacznie przyczynić się do wzrostu wykorzystania numeracji adresowej w Polsce przez jej udostępnienie w prostej formie zarówno do prezentacji jak i wyszukiwania. Rozwiązanie zostało zaproponowane na bazie doświadczeń autorów we wdrożeniach oprogramowania do prowadzenia numeracji adresowej prowadzonego przez ostatnie kilka lat w firmie Geo-system Sp. z o.o.. Zebrane doświadczenia pozwalają mieć nadzieję, że zaproponowane rozwiązanie spotka się z dobrym przyjęciem przez pozostałe firmy, które uczestniczą we wdrażaniu numeracji adresowej w Polsce i zechcą proponowane rozwiązanie zaimplementować w swoich rozwiązaniach. Jeśli tak się stanie to automatycznie zasób punktów adresowych i ulic oferowanych w ramach wdrożeń firmy Geo-system Sp. z o.o. zwiększy się o wdrożenia firm włączających się do inicjatywy. Korzyścią z takiego rozwiązania jest to, że pod jednym adresem sieciowym znajdziemy usługę, która będzie w stanie przekształcić podany adres na jego lokalizację przestrzenną. Usługa która jest przedmiotem opracowania pełni dwie role: 1. Jest punktem dostępowym do danych adresowych zgromadzonych w gminie. Jej bezpośrednie wykorzystanie pozwala pobrać wykaz miejscowości, ulic oraz wskazać położenie punktu adresowego. 2. Po zarejestrowaniu w repozytorium (usługa zbiorcza) staje się elementem mechanizmu pozwalającego wyszukiwać dane adresowe z terenu całej Polski. 1 Politechnika Warszawska, Wydział Geodezji i Kartografii, Pl. Politechniki 1, 00-661 Warszawa 2 Geo-system Sp. z o.o., ul. Kubickiego 9 lok. 5, 02-954 Warszawa 3 Usługa lokalizacji i udostępniania adresów została nagrodzona w ramach konkursu Krajowi Liderzy Innowacji i Rozwoju w roku 2010 uzyskując I miejsce w kategorii Innowacyjna usługa w edycji województwa mazowieckiego, a także uzyskując wyróżnienie w edycji krajowej tego konkursu.
1. Istota usługi lokalizacji Usługa lokalizacji umożliwia jednolity i prosty sposób wykorzystania gminnych baz adresowych (zrealizowanych w technologiach różnych firm) do lokalizacji przestrzennej wybranego adresu, co schematycznie przedstawiono na rysunku 1. Rysunek 1 Schemat funkcjonowania usługi lokalizacji Jako przykład wykorzystamy adres z miejscowości Choroszcz, ul. Szkolna 2, który przekazujemy jako parametr do usługi lokalizacji celem uzyskania jego przestrzennej lokalizacji. Przykład wywołania przedstawiono poniżej. http://punktyadresowe.pl/lokalizacja.php?adres=choroszcz,szkolna 2 Ważne jest przy tym, że użytkownik nie musi wiedzieć w której gminnej bazie adresowej taki adres się znajduje ani jaka jest jej struktura. Wszystkim tym zajmuje się usługa lokalizacji, która na podstawie własnego rejestru baz, potrafi się odwołać do odpowiedniej bazy poprzez udostępnioną przez właściciela bazy usługę sieciową. Standardowo w wyniku wywołania usługi lokalizacji, bez dodatkowych parametrów, otrzymujemy plik XML (zaprezentowany poniżej) ze współrzędnymi szukanego adresu w układzie 92 lub komunikat o braku takiego adresu. <WynikiWyszukiwania liczbapozycji="1"> <Pozycja> <Trafnosc>1</Trafnosc> <Miejscowosc>Choroszcz</Miejscowosc> <SIMC>0922811</SIMC> <Wojewodztwo>podlaskie</Wojewodztwo> <Powiat>białostocki</Powiat> <Gmina>Choroszcz - miasto</gmina> <ZakresMiejscowosci>764043,590045,769193,596121</ZakresMiejscowosci> Szkolna <ZakresUlicy>766499.7,593785,766570.8,593902.6</ZakresUlicy> <Punkt>2</Punkt> <WspolrzednePunktu>766540.2,593828.3</WspolrzednePunktu> </Pozycja> </WynikiWyszukiwania> Poprzez odpowiednie sterowanie parametrami usługi lokalizacji istnieje możliwość wykorzystania jej również do pobrania słownika miejscowości czy ulic.
2. Opis standardowych funkcji obsługiwanych przez usługę Aby usługa lokalizacji mogła wykorzystywać gminną bazę adresową, baza taka musi zostać w niej zarejestrowana. W tym celu firma, w której technologii baza funkcjonuje, udostępnia swoja usługę dostępową. Na użytek niniejszego opracowania tę usługę nazwiemy LinkToMPA. Usługa ta w zależności od parametru Request pozwala na rejestrację bazy w usłudze lokalizacji oraz na kilka innych czynności związanych z przeszukiwaniem bazy punktów adresowych. Każda baza adresowa posiada swoja indywidualną usługę dostępową. Najczęściej taka usługa jest funkcją PHP. Adres takiej usługi zostaje wpisany do serwisu katalogowego usługi lokalizacji, przechowującego adresy usług i informacje (metadane) o wszystkich usługach udostępnionych przez różne firmy. Dozwolone wartości parametru Request i związane z nimi czynności realizowane przez usługę dostępową przedstawiono w Tabeli 1 Tabela 1 Wykaz obsługiwanych parametrów usługi dostępowej Lp. Wartość parametru Request Znaczenie i parametru 1 Registration Funkcja generuje niezbędne dane do rejestracji bazy adresowej na serwerze katalogowym usługi lokalizacji. 2 GetAreas Funkcja zwraca wykaz miejscowości wraz z ich lokalizacją przestrzenną. 3 GetStreets Funkcja zwraca listę ulic z miejscowości o podanym ID. 4 GetAddressParExt Wartość parametru, przy której usługa dostępowa podaje lokalizację przestrzenną podanego: adresu, ulicy, miejscowości, na podstawie ID miejscowości, ID ulicy i numeru adresowego. 5 GetAddressLocation Wartość parametru, przy której usługa dostępowa powinna podać lokalizację przestrzenną podanego adresu na podstawie ID miejscowości, nazwy ulicy i numeru adresowego.
2.1. Funkcja Registration Funkcja niniejsza jest wywoływana podczas rejestracji i aktualizacji usługi na serwerze katalogowym. Może również służyć do pozyskania informacji o usłudze wyszukiwania. W wyniku zwracany jest plik XML, którego struktura przedstawiona została poniżej. Plik zawiera pojedynczy obiekt SerwisPunktyAdresowe, składający się z pól: IdentyfikatorSerwisu - jednoznaczne określenie serwisu. Może być tworzona poprzez połączenie identyfikatora dostarczyciela usługi i terenu objętego usługą np.: geosys_marki. NazwaSerwisu - nazwa serwisu czytelna dla użytkownika. InstytucjaOdpowiedzialna - podmiot odpowiedzialny za dane. ZakresPrzestrzenny - zakres działania usługi zdefiniowany przez atrybuty: o o CRS - identyfikator układu odniesienia xmin, ymin, xmax, ymax - współrzędne prostokąta ograniczającego zakres działania usługi we wskazanym układzie odniesienia. Przykładowy plik metadanych w formacie XML zwrócony przez usługę dostępową z systemu impa http://marki.punktyadresowe.pl/system/service.php?request=registration przedstawiono poniżej <?xml version="1.0" encoding="utf-8"?> <SerwisPunktyAdresowe> <IdentyfikatorSerwisu>geosys_marki</IdentyfikatorSerwisu> <NazwaSerwisu>Manager Punktów Adresowych Miasta Marki</NazwaSerwisu> <InstytucjaOdpowiedzialna>Urząd Miasta Marki</InstytucjaOdpowiedzialna> <ZakresPrzestrzenny CRS= 2180 xmin= 456045 ymin= 589030 xmax= 459000 ymax= 592000 /> </SerwisPunktyAdresowe>
2.2. Funkcja GetAreas Funkcja zwraca listę miejscowości z bazy adresowej wraz z datą, dla której dane są aktualne. Parametr Opis Request przyjmuje wartość GetAreas Format format, w jakim zwracane są dane; dostępne wartości to xml, json (domyślnie XML) CRS układ współrzędnych zwracanych danych; parametr przyjmuje wartość identyfikatora SRID układu; domyślnie PUWG1992, SRID: 2180 Przykładowe zapytanie: http://halinow.punktyadresowe.pl/system/service.php?request=getareas Zwracany jest plik XML, którego struktura opisana została poniżej lub plik w formacie JSON. Plik zawiera obiekt Miejscowosci (wraz z atrybutem data aktualizacji) grupujący obiekty Miejscowosc, zawierające następujące pola: Nazwa - Nazwa własna miejscowości Jednostka - identyfikator jednostki administracyjnej (TERYT) SIMC - identyfikator miejscowości w rejestrze GUS ZakresPrzestrzenny - obszar zawierający miejscowość zdefiniowany przez atrybuty o CRS - identyfikator układu odniesienia o xmin, ymin, xmax, ymax - współrzędne prostokąta ograniczającego miejscowość we wskazanym układzie odniesienia, ID wewnętrzny identyfikator miejscowości w systemie źródłowy (opcjonalnie). o Przykładowy plik wynikowy dla zapytania GetAreas <?xml version="1.0" encoding="utf-8"?> <Miejscowosci dataaktualizacji= 2013-10-15 12:00 > <Miejscowosc> <Nazwa>Brzeziny</Nazwa> <Jednostka>141207_5</Jednostka> <SIMC>0002631</SIMC> <ZakresPrzestrzenny CRS="2180" xmin="660695" ymin="483139" xmax="662925" ymax="485552"/> <ID>2362</ID> </Miejscowosc>... <Miejscowosc> <Nazwa>Halinów</Nazwa> <Jednostka>141207_4</Jednostka> <SIMC>0002766</SIMC> <ZakresPrzestrzenny CRS= 2180 xmin= 659651 ymin= 485845 xmax= 662160 ymax= 488086 /> <ID>2362</ID> </Miejscowosc> <Miejscowosc> <Nazwa>Hipolitów</Nazwa> <Jednostka>141207_5</Jednostka> <SIMC>0002789</SIMC> <ZakresPrzestrzenny CRS= 2180 xmin= 658304 ymin= 485490 xmax= 661400 ymax= 487490 /> <ID>2363</ID> </Miejscowosc>... <Miejscowosc> <Nazwa>Żwirówka</Nazwa> <Jednostka>141207_5</Jednostka> <SIMC>0002950</SIMC> <ZakresPrzestrzenny CRS= 2180 xmin= 663800 ymin= 485846 xmax= 665049 ymax= 487076 /> <ID>2378</ID> </Miejscowosc> </Miejscowosci>
2.3. Funkcja GetStreets Funkcja zwraca listę ulic dla miejscowości określonej przez jej identyfikator SIMC, wraz z ich lokalizacjami przestrzennymi. Parametr Opis Request przyjmuje wartość GetStreets AreaID Format CRS identyfikator SIMC miejscowości format, w jakim zwracane są dane; dostępne są xml, json (domyślnie XML) identyfikator układu współrzędnych, w którym są zwracane wyniki; domyślnie 2180 (układ 1992) Przykładowe zapytanie: http://halinow.punktyadresowe.pl/system/service.php?request=getstreets&areaid=0002766 W wyniku zwracany jest plik w formacie XML lub JSON z nazwami ulicy, podstawowymi informacjami przestrzennymi oraz identyfikatorami wewnętrznymi w systemie udostępniającym usługę. Przykładowy plik wynikowy dla zapytania GetStreets <?xml version="1.0" encoding="utf-8"?> <Ulice> <ID>53180</ID> <Nazwa>3-go Maja</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661124" ymin="486867" xmax="661950" ymax="487559"/> <ID>53227</ID> <Nazwa>Baśniowa</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661446" ymin="487334" xmax="661714" ymax="487548"/> <ID>53175</ID> <Nazwa>Bema</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="660256" ymin="486155" xmax="661753" ymax="486904"/>... <ID>53182</ID> <Nazwa>Wschodnia</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661752" ymin="486155" xmax="661945" ymax="486366"/> <ID>53162</ID> <Nazwa>Zachodnia</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="659817" ymin="487488" xmax="660213" ymax="488000"/> <ID>53868</ID> <Nazwa>Zielona</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661974" ymin="487299" xmax="662044" ymax="487310"/>
2.4 Funkcja GetAddressParExt Funkcja zwraca współrzędne punktu adresowego w zadanym w zapytaniu układzie współrzędnych na podstawie ID miejscowości, ID ulicy i podanego numeru adresowego. Parametr Request AreaID StreetID Number Format CRS Opis przyjmuje wartość GetAddressParExt identyfikator SIMC miejscowości identyfikator wewnętrzny ulicy w systemie obsługującym usługę, może być puste (wyszukiwanie w punktach miejscowości nie posiadających ulicy) numer szukanego punktu adresowego format, w jakim zwracane są dane; dostępne wartości to xml, json (domyślnie XML) identyfikator układu współrzędnych, w którym są zwracane wyniki; domyślnie 2180 (układ 1992) Przykładowe zapytanie: http://halinow.punktyadresowe.pl/system/service.php?request=getaddressparext&areaid=0002766&streetid=53180&number=19c W odpowiedzi zwracany jest plik w plik w formacie XML lub JSON. Znaczenie poszczególnych pól w pliku jest następujące: ZnalezionoMiejscowosc Dostępne wartości 0 (brak) lub 1 (znaleziono). Informuje czy plik wynikowy zawiera położenie miejscowości. Położenia miejscowości można użyć gdy np. nie znajdzie się szukanego punktu. ZnalezionoUlice ZnalezionoPunkt Dostępne wartości 0 (brak) lub 1 (znaleziono). Informuje czy plik wynikowy zawiera położenie ulicy. Położenia ulicy można użyć gdy np. nie znajdzie się szukanego punktu. Dostępne wartości 0 (brak) lub 1 (znaleziono). Informuje czy plik wynikowy zawiera położenie punktu. WspolrzednePunktu Zawiera informacje: x,y,crs ZakresUlicy ZakresMiejscowosci Zawiera informacje: xmin,ymin,xmax,ymax,crs Zawiera informacje: xmin,ymin,xmax,ymax,crs Przykładowy plik wynikowy dla zapytania GetAddressParExt <?xml version="1.0" encoding="utf-8"?> <Rezultat> <ZnalezionoMiejscowosc>1</ZnalezionoMiejscowosc> <ZnalezionoUlice>1</ZnalezionoUlice> <ZnalezionoPunkt>1</ZnalezionoPunkt> <WspolrzednePunktu x="801053.8" y="386112.5" crs="2180"/> <ZakresUlicy crs="2180" xmin="661124.6" ymin="486867.5" xmax="661950.5" ymax="487559.7"/> <ZakresMiejscowosci crs="2180" xmin="800640" ymin="385196" xmax="802537" ymax="387238"/> </Rezultat>
2.5 Funkcja GetAddressLocation Funkcja zwraca informacje o znalezionym punkcie lub ulicy w formacie tekstowym rozdzielanym średnikami. Dane powinny być zapisane jako zwykły tekst (Content-Type: text/plain). Funkcja jest wykorzystana przez usługą zbiorczą do wyszukiwania. Bardzo istotna jest więc jej szybkość działania. Parametr Request AreaID StreetName Number Opis przyjmuje wartość GetAddressLocation identyfikator SIMC miejscowości nazwa ulicy, przekazywany jest ciąg wyrazów rozdzielony spacjami i zapisany małymi literami i bez polskich znaków np. armii krajowej, polna numer szukanego punktu adresowego CRS identyfikator układu współrzędnych, w którym są zwracane wyniki; domyślnie 2180 (układ 1992) Wyszukiwanie może się odbywać w następujących wariantach: Szukana jest ulica, a więc przekazany jest tylko parametr StreetName. Szukany jest punkt adresowy nieprzypisany do żadnej ulicy. Sytuacja typowa dla małych wsi pozbawionych nazwanych ulic np. Trzcianka 4. W takim przypadku przekazywany jest jedynie parametr Number. Szukany jest punkt położony przy konkretnej ulicy. Sytuacja najbardziej typowa. Zarówno parametr StreetName jak i Number są przekazywane. W wyniku zwracany jest plik tekstowy, z poszczególnymi informacjami oddzielonymi od siebie średnikami. Znaczenie kolejnych pól w ciągu tekstowym prezentuje poniższa tabela: Pole Dopuszczalne wartości Opis 0 liczba całkowita Trafność wyniku. 0 nic nie znaleziono, 1 znaleziono szukany punkt lub ulicę, 2 szukano punktu przy ulicy, a znaleziono tylko ulicę. 1 0,1 0 wynik posiada informacje o ulicy, 1 wynik nie posiada informacje o ulicy. Jeśli 1 to powinny zostać wypełnione pola [4,5,6,7,8] 2 0,1 0 wynik posiada informacje o punkcie, 1 wynik nie posiada informacje o punkcie. Jeśli 1 to powinny zostać wypełnione pola [9,10,11,12] 3 liczba całkowita lub puste Wewnętrzny identyfikator ulicy, nie jest wymagany 4 tekst lub puste Nazwa ulicy 5 liczba rzeczywista lub puste Współrzędna x min zakresu przestrzennego ulicy (układ matematyczny!). 6 liczba rzeczywista lub puste Współrzędna y min zakresu przestrzennego ulicy (układ matematyczny!). 7 liczba rzeczywista lub puste Współrzędna x max zakresu przestrzennego ulicy (układ matematyczny!). 8 liczba rzeczywista lub puste Współrzędna y max zakresu przestrzennego ulicy (układ matematyczny!). 9 liczba całkowita lub puste Wewnętrzny identyfikator punktu, nie jest wymagany 10 tekst lub puste Numer znalezionego punktu. 11 liczba rzeczywista lub puste Współrzędna x znalezionego punktu (układ matematyczny!). 12 liczba rzeczywista lub puste Współrzędna y znalezionego punktu (układ matematyczny!).
Poniżej przedstawiono kilka przykładów zapytań kierowanych do baz i uzyskiwanych odpowiedzi. 1. Typowe zapytanie o miejscowość, ulicę i numer: http://halinow.pktadr.pl/system/service.php?request=getaddresslocation&areaid=0002766&streetname=kosciuszki&number=21 1;1;1;53189;Kościuszki;660695.6;486690.2;660924.1;487147.9;234139;21;660802.8;486923.2 2. Zapytanie o miejscowość i ulicę: http://halinow.pktadr.pl/system/service.php?request=getaddresslocation&areaid=0002766&streetname=pilsudskiego 1;1;0;53184;Józefa Piłsudskiego;659904;486828.6;661154;487453;;;;; 3. Zapytanie o miejscowość i ulicę i numer: http://halinow.pktadr.pl/system/service.php?request=getaddresslocation&areaid=0002766&streetname=kosciuszki&number=21c Punkt nie został znaleziony (trafność - pierwsze pole wyniku równe 2), więc zwracana jest jedynie informację o ulicy. 2;1;0;53189;Kościuszki;660695.6;486690.2;660924.1;487147.9;;;; 4. Zapytanie o miejscowość i ulicę i numer: http://halinow.pktadr.pl/system/service.php?request=getaddresslocation&areaid=0002766&streetname=lesna&number=21c Nic nie znaleziono (trafność - pierwsze pole wyniku równe 0), 0;0;0;;;;;;;;;; 3. Uwagi końcowe W załączniku do tego dokumentu znajduje się plik PHP realizujący wszystkie opisane funkcje dla bazy testowej systemu impa. Przyjęta zasadą jest, że wszystkie pliki muszą być kodowane w UTF-8.