Propozycja standaryzacji usługi lokalizacji adresu
Transkrypt
Propozycja standaryzacji usługi lokalizacji adresu
dr inż. Waldemar Izdebski1,2 mgr inż. Andrzej Bielasty2 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ą lokalizacji3, 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 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. 2 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> <Ulica>Szkolna</Ulica> <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 wykorzystania jej również do pobrania słownika miejscowości czy ulic. istnieje możliwość 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 2 GetAreas Funkcja generuje niezbędne dane do rejestracji bazy adresowej na serwerze katalogowym usługi lokalizacji. Funkcja zwraca wykaz miejscowości wraz z ich lokalizacją przestrzenną. 3 GetStreets Funkcja zwraca 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. listę ulic z miejscowości 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 CRS - identyfikator układu odniesienia o 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 Wynik: 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" <ID>2362</ID> </Miejscowosc> ................. <Miejscowosc> <Nazwa>Halinów</Nazwa> <Jednostka>141207_4</Jednostka> <SIMC>0002766</SIMC> <ZakresPrzestrzenny CRS=”2180” xmin=”659651” <ID>2362</ID> </Miejscowosc> <Miejscowosc> <Nazwa>Hipolitów</Nazwa> <Jednostka>141207_5</Jednostka> <SIMC>0002789</SIMC> <ZakresPrzestrzenny CRS=”2180” xmin=”658304” <ID>2363</ID> </Miejscowosc> .................. <Miejscowosc> <Nazwa>Żwirówka</Nazwa> <Jednostka>141207_5</Jednostka> <SIMC>0002950</SIMC> <ZakresPrzestrzenny CRS=”2180” xmin=”663800” <ID>2378</ID> </Miejscowosc> </Miejscowosci> ymin="483139" xmax="662925" ymax="485552"/> ymin=”485845” xmax=”662160” ymax=”488086”/> ymin=”485490” xmax=”661400” ymax=”487490”/> ymin=”485846” xmax=”665049” ymax=”487076”/> 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 Wynik: 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> <Ulica> <ID>53180</ID> <Nazwa>3-go Maja</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661124" ymin="486867" xmax="661950" ymax="487559"/> </Ulica> <Ulica> <ID>53227</ID> <Nazwa>Baśniowa</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661446" ymin="487334" xmax="661714" ymax="487548"/> </Ulica> <Ulica> <ID>53175</ID> <Nazwa>Bema</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="660256" ymin="486155" xmax="661753" ymax="486904"/> </Ulica> ........... <Ulica> <ID>53182</ID> <Nazwa>Wschodnia</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661752" ymin="486155" xmax="661945" ymax="486366"/> </Ulica> <Ulica> <ID>53162</ID> <Nazwa>Zachodnia</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="659817" ymin="487488" xmax="660213" ymax="488000"/> </Ulica> <Ulica> <ID>53868</ID> <Nazwa>Zielona</Nazwa> <ZakresPrzestrzenny CRS="2180" xmin="661974" ymin="487299" xmax="662044" ymax="487310"/> </Ulica> 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 Opis przyjmuje wartość GetAddressParExt AreaID identyfikator SIMC miejscowości StreetID identyfikator wewnętrzny ulicy w systemie obsługującym usługę, może być puste (wyszukiwanie w punktach miejscowości nie posiadających ulicy) Number numer szukanego punktu adresowego Format format, w jakim zwracane są dane; dostępne wartości to xml, json (domyślnie XML) CRS 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 Wynik: 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 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. ZnalezionoPunkt 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 Zawiera informacje: xmin,ymin,xmax,ymax,crs ZakresMiejscowosci 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 Opis przyjmuje wartość GetAddressLocation AreaID identyfikator SIMC miejscowości StreetName nazwa ulicy, przekazywany jest ciąg wyrazów rozdzielony spacjami i zapisany małymi literami i bez polskich znaków np. “armii krajowej”, “polna” Number 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. Wynik: 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 0 Dopuszczalne wartości liczba całkowita Opis 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 “xmin” zakresu przestrzennego ulicy (układ matematyczny!). 6 liczba rzeczywista lub puste Współrzędna “ymin” zakresu przestrzennego ulicy (układ matematyczny!). 7 liczba rzeczywista lub puste Współrzędna “xmax” zakresu przestrzennego ulicy (układ matematyczny!). 8 liczba rzeczywista lub puste Współrzędna “ymax” 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 Wynik: 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 Wynik: 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 Wynik: 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 Wynik: 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.