Image for TERYT – Praktyczne zastosowanie w Web Aplikacjach

TERYT – Praktyczne zastosowanie w Web Aplikacjach

Czas czytania:

Każdy programista niejednokrotnie stawał przed zadaniem zbudowania aplikacji opartych o zbieranie danych o klientach. Wystarczy popatrzeć na prosty formularz rejestracyjny.  Za każdym razem powtarzają się podobne elementy np.: lokalizacja klienta. O ile przygotowanie selecta z województwami nie sprawia większego kłopotu to dalsze uszczegółowienie danych o kliencie jest o wiele bardziej skomplikowane. Mam tu na myśli powiat czy gmina z której pochodzi. Nie mówiąc już o identyfikacji klienta na najniższym poziomie tj. miasta/dzielnice czy ulice. Samodzielne przygotowanie tak szczegółowego rozwiązania graniczy z cudem. Ale z pomocą przychodzi nam Główny Urząd Statystyczny.

Co roku GUS udostępnia aktualne dane dotyczące tzw. jednostek samorządu terytorialnego. Znajdziemy tam wszystkie miejscowości, ulice, osiedla, dzielnice jakie istnieją w Polsce. Wszystkie te dane uszeregowane są wg swojej hierachii. I tak po wejściu na stronę stat.gov.pl możemy przejść do działu nazwanego TERYT a tam dostępne są 4 pliki regualarnie aktualizowane przez GUS:

  • TERC – zawiera zbiór jednostek  podziału terytorialnego Polski – województwa-powiaty-gminy
  • SIMC – to zbiór wszystkich miejscowości znajdujących się na terenie Polski
  • ULIC – wykaz ulic do poszczególnych miejscowości
  • WMRODZ – zbiór symboli i nazw rodzajów miejscowości

Kodowanie JST

Każda jednostka samorządu terytorialnego posiada swój własny niezimenny kod. Jego długość uzależniona jest od rodzaju jednostki np:

  • 12 –  województwo małopolskie
  • 1218 – powiat wadowicki
  • 121809 – gmina Wadowice
  • 1218094 – na samym końcu dochodzi jeszcze jedna cyfra która czy dana jednostka stanowi: miasto, gminę wiejską, gminę miejsko-wiejską.

Pełna baza JST znajduje się wpliku TERC.xml

Baza miejscowości

Plik SIMC.xml zawiera listę wszystkich miejscowości znajdujących się na terenie naszego  kraju. Są one powiązane z bazą TERC poprzez pola WOJ,POW,GMI,RODZ_GMI.

Każda miejscowość ma przypisany unikalny numer SYM. Dodatkowo znajduje się tam jeszcze jeden numer SYMPOD który jest unikalny identyfiktatorem części /rodzaju/ miejscowości który wchodzi w skład danej miejscowości (wieś,przysiółek, itd).

Przykładowo w skład Wadowic wchodzi wieś Babica która składa się z: Filipówki, Mrowicy, Podlesia, itp.

Baza ulic

Największy plik (ULIC.xml) zawiera bazę ulic. Ulica jest powiązana z daną gminą (WOJ,POW,GMI,RODZ_GMI), oraz z miejscowością w bazie SIMC (pole SYM). Każda ulica posiada swój unikalny numer SYM_UL.

Nazwy ulic zostały rozbite na człony: cecha (ul., al., rondo, etc), nazwa ulicy (NAZWA_1), oraz druga nazwa (NAZWA_2) w której znajdują dodatkowe pomocnicze informacje dot. nazwy ulicy np: ul. Adama Mickiewicza (CECHA, NAZWA_2 NAZWA_1).

Patrząc przykładowo na  Wadowice możemy w łatwy sposób znaleźć ulice znajdujące się na terenie miasta Wadowice. Wadowice mają przypisany kod 1218094 i możemy go powiązać z bazą ULIC (wykorzystując pola WOJ,POW,GMI,RODZ). Dzięki temu w łatwy sposób otrzymamy spis wszytkich ulic miasta.

Aby otrzymać listę obszarów jakie występują w mieście lub w obrębie gminy możemy skorzystać z bazy SIMC za pomocą tych samych powiązań( WOJ,POW,GMI,RODZ).

Patrząc na Wadowice (wykorzystując kod 1218095  WOJ=12 POW=18 GMI=09 RODZ=5) otrzymujemy listę wsi,przysiółków itp., które znajdują się na terenie Wadowic. Ograniczając po polu RM możemy bez problemu wyfiltrować i podzielić znalezione obszary na interesujące nas części.

Jeżeli wieś posiada jakieś ulice to takie informacje także znajdziemy w bazie TERYT. Należy jednak zwrócić uwagę, że podział administracyjny Polski jest bardziej złożony.

Sama Warszawa, Kraków, Poznań, Wrocław posiada inny układ administracyjny ze względu na swoją wielkość i znaczenie. Także niektóre małe miejscowości mają swoje różnice. Niektóre gminy nie mające statusu miast mogą posiadać ulice, niektóre nie posiadają a są też takie które na swych częściach posiadają zaledwie kilka ulic a reszta lokalizacji nie posiada ich.

Trzeba na to zwrócić uwagę przy implementacji dla konkretnego rozwiązania.

Jak wykorzystać bazę lokalizacji

Sposobów wykorzystania powyższej bazy jest wiele. Poniżej przedstawiamy kilka.

Pierwszy i najprostszy to wykorzystanie bazy mysql do serwowania danych. Następnie będziemy mogli wykorzystać te dane np w polach wyboru (województwo, powiat, gmina) np formularza edycyjnego. Dodatkowo można skorzystać z podpowiadania ulic.

Aby zaimportować dane do mysql trzeba przygotować strutkurę bazy oraz odpowiedio przetworzyć plik xml. Obie rzeczy są bardzo proste. Kolumny tabel mogą odzworowywać pola w pliku xml, przy czym trzeba pamiętać o odpowiednim ustawieniu kluczy głównych.

Sam import danych również jest bardzo prosty. Wykorzystując np. technologię PHP można skorzystać z gotowych funkcji:

$xml = simplexml_load_file('xml_file.xml'); 
foreach($xml->catalog->row as $item) {        
mysql_query("INSERT INTO ...");  
}

Tak przetworzoną bazę TERYT można wykorzystać do wielu funkcjonalności. Może służyć ona jako system podpowiedzi (augosuggest) wyszukiwarki, interfejs filtrów do wizualizacji obiektów na mapach.

Można także pokusić się o coś więcej i zintegrować bazę z kodami pocztowymi lub/i współrzednymi geograficznymi podanych lokalizacji.

Dzięki takiej integracji otrzymujemy wspaniałe narzędzie do zbierania informacji o naszych klientach, obiektach, ofertach w zależności od potrzeb uwzględniające szeroką gamę filtrów do analizy danych.

Wydajność

Przy implementacji rozwiazania nalęży wziąć pod uwagę także wydajność systemu. Można wykorzystać jakiś dostępny sposób cache’owania danych np memcache. Można także dane trzymać w statycznych plikach w formacie json odpowiednio posegregowane, dzięki czemu będą one szybko i wydajnie dostępne dla klienta.

Można także skorzystać z dodatkowych narzędzie oferujących szybkie i wydajne wyszukiwanie informacji np. Sphinx. Przygotowując odpowiednie indeksy z danymi (uwzględniające nasze potrzeby) można stworzyć bardzo wydajny system wyszukiwania danych. Swoją droga, w Shpinx można nie tylko przetrzymywać dane bazy TERYT ale także powiązane z nimi oferty,obiekty,lokalizacje,klientów.

Wykorzystując baze TERYT oraz Sphinxa można także pokusić się o przygotowanie rozbudowanego autosuggesta. Klient nie będzie musiał podawać osobno miejscowości , gminy, powiatu, czy ulicy. Wystarczy że poda jedną z tych informacji a system podpowie mu najbardziej zbliżone i trafne odpowiedzi.

Jak widać sposobów wykorzystania bazy TERYT jak i jej przygotowania jest wiele. Każdy znajdzie coś odpowiedniego dla siebie i swoich potrzeb projektowych.

Zainteresował Cię ten artykuł?

Oferujemy profesjonalne wsparcie programistów w technologii Web.
Może Cię również zainteresować:
Clutch Recognizes GOGOmedia as a 2022 Development Leader in Poland

GOGOmedia is a multidisciplinary team with vast experience in the digital technology space. We deliver… Read More

Zatrzymać użytkownika na stronie — 4 praktyczne sposoby

Tworząc stronę, zadaliście się sobie mnóstwo trudu. Macie dobre teksty, poprawne UX i atrakcyjny design,… Read More