Poradnik · 9 minut czytania

Plik GML EGiB od środkaco naprawdę jest w pliku z ośrodka

Plik GML to zwykły tekst — można go otworzyć i przeczytać. Nikt tego nie robi, bo pierwsze, co widać, to ściana znaczników. A w środku jest całkiem prosty porządek, który warto poznać raz, bo tłumaczy prawie wszystkie dziwne rzeczy, jakie ten plik potem robi: dlaczego jedno narzędzie go otwiera, a drugie pokazuje pustą mapę, dlaczego nie widać właściciela, skąd biorą się podwójne granice i dlaczego numery działek lądują nie tam, gdzie powinny.

· Bartosz Bolek, geodeta uprawniony

Wszystkie fragmenty poniżej pochodzą z pliku demonstracyjnego z danymi całkowicie fikcyjnymi — obręb Roma-Palatinus, właściciele z pierwszego wieku przed naszą erą. Prawdziwego pliku z ośrodka nie wkleję, bo są w nim dane żywych ludzi. Odstępy i złamania linii dodałem, żeby dało się to czytać; w pliku wszystko stoi w jednym ciągu.

To nie jest plik z działkami. To baza danych w jednym pliku

Plik GML EGiB nie jest listą działek. Jest zbiorem kilkunastu rodzajów obiektów, które leżą w nim obok siebie i wskazują na siebie nawzajem — działka jest jednym z nich i wcale nie najważniejszym. Bliżej temu do wyciągu z bazy danych niż do rysunku.

W pliku demonstracyjnym, który ma dziewiętnaście działek, siedzi tego tyle:

Rodzaj obiektuIlePo co
Działka ewidencyjna19granice, pole, numer KW
Punkt graniczny43współrzędne, stabilizacja, dokładność
Kontur użytku gruntowego19granice użytków
Kontur klasyfikacyjny4granice klas
Budynek14obrysy, kondygnacje, funkcja
Jednostka rejestrowa gruntów19spina działki z władaniem
Udział we własności21kto, do czego, w jakiej części
Osoba fizyczna10dane podmiotu
Instytucja4dane podmiotu
Adres podmiotu i adres nieruchomości28adresy
Prezentacja graficzna56gdzie i pod jakim kątem stoi opis

Razem 239 obiektów i 287 powiązań między nimi — na dziewiętnaście działek. Stąd bierze się rozmiar plików i stąd wynika rzecz praktyczna: nie da się wyciąć z pliku kawałka przez skopiowanie fragmentu tekstu. Wycięta działka straci punkty graniczne, jednostkę rejestrową i właściciela, bo one leżą w zupełnie innym miejscu pliku.

Pierwsze pięć linii decyduje, czy narzędzie plik otworzy

Początek pliku wygląda tak:

<?xml version="1.0" encoding="UTF-8"?>
<gml:FeatureCollection
 xmlns:gml="http://www.opengis.net/gml/3.2"
 xmlns:xlink="http://www.w3.org/1999/xlink"
 xmlns:egb="ewidencjaGruntowIBudynkow:1.0">

Ostatnia linia jest najważniejsza w całym pliku. To przestrzeń nazw — deklaracja, według jakiego schematu plik został zapisany. I tu jest haczyk, na który trafi każdy, kto porównuje pliki z dwóch powiatów: w obiegu są dwa schematy ewidencji.

  • ewidencjaGruntowIBudynkow:1.0 — aktualny, z „I" w środku.
  • ewidencjaGruntowBudynkow:1.0 — starszy, bez „I". Obiekty mają w nim inne nazwy, informacja o wersji siedzi w osobnym elemencie, a kartografia zapisana jest inaczej. Część ośrodków nadal tak wydaje dane.

Jedna litera. Narzędzie napisane tylko pod aktualny schemat otworzy plik ze starszego bez błędu i pokaże pustą mapę — bo nie rozpozna ani jednego obiektu. To jest najczęstsza przyczyna zgłoszeń „u mnie nie działa, a u kolegi działa". Dlatego kiedy ktoś pisze, że plik się nie wczytał, pierwsze pytanie nie brzmi „z jakiego powiatu", a „co jest w piątej linii".

Możesz to sprawdzić sam w pięć sekund: otwórz plik w Notepad++ i naciśnij Ctrl+F na xmlns:egb.

Współrzędne są odwrotnie, niż myślisz

Geometria działki wygląda tak:

<egb:geometria>
  <gml:Polygon srsName="urn:ogc:def:crs:EPSG::2177">
    <gml:posList>5555100.00 6602000.00 5555100.00 6602010.00 ...</gml:posList>
  </gml:Polygon>
</egb:geometria>

Cała geometria to jeden długi ciąg liczb bez żadnych przecinków ani nawiasów — pary czytane po kolei. I pierwsza liczba w parze jest współrzędną północną, zgodnie z definicją układu. Tu 5555100 to północna, 6602000 wschodnia, a EPSG::2177 oznacza PL-2000 strefę 6.

CAD oczekuje odwrotnie — u niego pierwsza liczba idzie w prawo. Narzędzie, które przepisze liczby w kolejności z pliku, da lustrzane odbicie rysunku. Oś tego odbicia biegnie pod kątem 45 stopni, więc obrotem się tego nie naprawia — trzeba zamienić współrzędne miejscami. Jeśli kiedyś dostałeś z konwertera rysunek, który wyglądał „jakoś dziwnie, ale prawie dobrze", to był właśnie ten przypadek.

W strefie 7 i 8 widać to od razu, bo współrzędna północna w Polsce nigdy nie zaczyna się od siódemki ani ósemki. W strefie 5 i 6 jest trudniej, bo tam obie liczby zaczynają się tak samo i odbity rysunek ląduje w pozornie sensownym miejscu — zostaje porównanie kształtu działki z geoportalem.

Drugi szczegół: srsName stoi przy geometrii, nie przy pliku. Bywają pliki, w których go nie ma wcale — wtedy narzędzie musi strefę odgadnąć ze współrzędnej wschodniej, bo pierwsza cyfra wskazuje ją jednoznacznie: piątka to strefa 5, szóstka strefa 6 i tak dalej.

Przy działce nie ma właściciela

To zaskakuje najczęściej. Oto cała działka, skrócona tylko o powtarzalne fragmenty:

<egb:EGB_DzialkaEwidencyjna gml:id="dz.1">
  <egb:idDzialki>041905_2.0017.1</egb:idDzialki>
  <egb:geometria> ...posList... </egb:geometria>
  <egb:numerKW>BY1Z/00000001/8</egb:numerKW>
  <egb:poleEwidencyjne uom="ha">0.3600</egb:poleEwidencyjne>
  <egb:dokladnoscReprezentacjiPola>1</egb:dokladnoscReprezentacjiPola>
  <egb:punktGranicyDzialki xlink:href="pkt.001"/>
  <egb:punktGranicyDzialki xlink:href="pkt.002"/>
</egb:EGB_DzialkaEwidencyjna>

Jest numer, jest geometria, jest pole, jest numer księgi. Nie ma ani nazwiska, ani adresu, ani nawet numeru działki jako napisu do postawienia na mapie. Są natomiast odnośniki xlink:href — wskaźniki do obiektów leżących gdzie indziej w pliku. Tych odnośników jest w pliku demonstracyjnym 287 i one są właściwą treścią pliku.

Żeby dojść od działki do właściciela, trzeba przejść łańcuch czterech obiektów:

działka → jednostka rejestrowa → udział we własności → podmiot

Udział wygląda tak:

<egb:EGB_UdzialWeWlasnosci gml:id="udz.1.1">
  <egb:rodzajWladania>7</egb:rodzajWladania>
  <egb:licznikUlamkaOkreslajacegoWartoscUdzialu>1</egb:licznikUlamkaOkreslajacegoWartoscUdzialu>
  <egb:mianownikUlamkaOkreslajacegoWartoscUdzialu>1</egb:mianownikUlamkaOkreslajacegoWartoscUdzialu>
  <egb:podmiotUdzialuWlasnosci xlink:href="in.spqr"/>
  <egb:przedmiotUdzialuWlasnosci xlink:href="jrg.1"/>
</egb:EGB_UdzialWeWlasnosci>

Dwie rzeczy warte zapamiętania. Pierwsza: udział jest zapisany ułamkiem, licznik i mianownik osobno — jedna trzecia zostaje jedną trzecią, nic się nie zaokrągla. Druga: nazwy pól są właśnie takie, pełnymi zdaniami. To nie przesada z mojej strony, to dosłowna nazwa z rozporządzenia.

Praktyczny wniosek: narzędzie, które czyta tylko działki, przy pliku pełnym właścicieli napisze „brak danych podmiotu". Nie dlatego, że ich nie ma, ale dlatego, że nie przeszło łańcucha. Przy współwłasności dziesięciu osób trzeba przejść dwanaście obiektów, żeby odpowiedzieć na jedno pytanie: kto jest właścicielem.

Co plik wie o człowieku

<egb:EGB_OsobaFizyczna gml:id="os.caesar">
  <egb:pierwszeImie>Gaius</egb:pierwszeImie>
  <egb:pierwszyCzlonNazwiska>Iulius Caesar</egb:pierwszyCzlonNazwiska>
  <egb:imieOjca>Gaius</egb:imieOjca>
  <egb:imieMatki>Aurelia</egb:imieMatki>
  <egb:adresZameldowania xlink:href="adr.os.caesar"/>
</egb:EGB_OsobaFizyczna>

Imiona ojca i matki. To jest ta część pliku, o której większość osób nie wie, a która powinna zamknąć dyskusję o wrzucaniu pliku GML do pierwszego napotkanego konwertera online. W pliku z ewidencji masz imię, nazwisko, imiona rodziców, adres zameldowania i numer księgi wieczystej — dla każdego właściciela w obrębie, którego dotyczy Twoja praca. To nie są Twoje dane. Dostałeś je do wykonania konkretnej roboty.

Przy okazji: to samo jest argumentem przy pytaniu, czy plik GML dołączać do przekazywanej komuś dokumentacji. Rysunek — owszem. Plik źródłowy — raczej nie.

Powierzchnia jest zapisem, nie wynikiem

W działce stoi poleEwidencyjne i obok dokladnoscReprezentacjiPola. To ważne rozróżnienie: pole w pliku jest atrybutem przepisanym z rejestru, a nie liczbą policzoną z granic. Oba mogą się nie zgadzać i to jest zupełnie normalne — pole w rejestrze bywa starsze od geometrii o kilkadziesiąt lat.

Da się to sprawdzić i warto to robić przed podziałem. Policz pole z posList i porównaj z poleEwidencyjne. W pliku demonstracyjnym zgadza się co do metra, bo sam go tak zbudowałem — w prawdziwym pliku ciekawa jest właśnie różnica. Jeśli wychodzi kilkadziesiąt metrów na działce o powierzchni trzydziestu arów, wiesz, że czeka Cię rozmowa z geodetą uprawnionym.

Punkt graniczny wie o sobie więcej, niż się wydaje

<egb:EGB_PunktGraniczny gml:id="pkt.001">
  <egb:idPunktu>041905_2.0017.001</egb:idPunktu>
  <egb:rodzajStabilizacji>1</egb:rodzajStabilizacji>
  <egb:spelnienieWarunkowDokladnosciowych>1</egb:spelnienieWarunkowDokladnosciowych>
  <egb:geometria>
    <gml:Point srsName="urn:ogc:def:crs:EPSG::2177">
      <gml:pos>5555100.00 6602000.00</gml:pos>
    </gml:Point>
  </egb:geometria>
</egb:EGB_PunktGraniczny>

To jest mój ulubiony fragment pliku, bo tych informacji nie ma w geoportalu. Są wyłącznie w materiałach wydawanych przez ośrodek dokumentacji — i stoją przy każdym punkcie osobno, a nie przy działce.

Co znaczą poszczególne pola:

  • idPunktu — identyfikator punktu: TERYT jednostki ewidencyjnej, numer obrębu i numer punktu w obrębie.
  • spelnienieWarunkowDokladnosciowych — 1 oznacza punkt spełniający warunki dokładnościowe, 2 punkt, który ich nie spełnia.
  • rodzajStabilizacji — czym punkt jest oznaczony w terenie: 1 brak informacji, 2 niestabilizowany, 3 znak naziemny, 4 znak naziemny i podziemny, 5 znak podziemny, 6 szczegół terenowy I grupy dokładnościowej. W przykładzie wyżej stoi 1, czyli akurat „brak informacji".

Warto wiedzieć, że przy punkcie granicznym w starszych plikach spotyka się inne atrybuty niż dziś. Rozporządzenie z 2021 roku zamieniło dotychczasowy błąd położenia punktu granicznego (BPP) na spełnienie standardów dokładnościowych (ISD), a źródło danych o położeniu punktu (ZRD) na sposób pozyskania danych (SPD). Bazy miały być dostosowane do końca 2023 roku.

To nie była zmiana samej nazwy. BPP też był kodem, nie liczbą w metrach — wartości od 1 do 6. Przeliczenie jest proste: dawne 1 i 2 dają dziś „spełnia", dawne 3, 4, 5 i 6 dają „nie spełnia". A „spełnia" znaczy, że położenie punktu wyznaczono względem osnowy poziomej z dokładnością nie mniejszą niż 0,10 m. Czyli z pliku nie odczytasz konkretnego błędu w centymetrach — odczytasz, po której stronie tego progu punkt leży.

Numer działki to osobny obiekt

Napisu „1" nie ma ani w działce, ani nigdzie obok niej. Jest w pięćdziesięciu sześciu samodzielnych obiektach, po jednym na każdy opis:

<egb:PrezentacjaGraficzna>
  <egb:etykieta>
    <egb:Etykieta>
      <egb:geometria><gml:Point><gml:pos>5555106.00 6602026.00</gml:pos></gml:Point></egb:geometria>
      <egb:justyfikacja>5</egb:justyfikacja>
      <egb:katObrotu>0</egb:katObrotu>
    </egb:Etykieta>
  </egb:etykieta>
  <egb:obiektPrzedstawiany xlink:href="dz.1"/>
</egb:PrezentacjaGraficzna>

Obiekt mówi: tu jest punkt wstawienia, taki jest kąt obrotu, tak wyrównać tekst, a dotyczy to działki dz.1. Ktoś w ośrodku ustawił te opisy tak, żeby dały się przeczytać na wąskich działkach i wzdłuż dróg.

Dlatego opisy tak chętnie „gubią się" przy konwersji: nie są atrybutem działki do przepisania, tylko osobnymi obiektami, które trzeba świadomie przeczytać, powiązać z właściwym obiektem i obrócić. Narzędzie, które tego nie robi, rzuca numer na środek działki poziomo — i przy pasie drogowym numer wychodzi w pole obok.

Trzy identyfikatory i tylko jeden znaczy coś na zewnątrz

W jednej działce są trzy różne rzeczy, które wszystkie nazywa się identyfikatorem, i stąd regularne nieporozumienia:

  • gml:id="dz.1" — techniczny uchwyt, po którym odnośniki xlink trafiają do obiektu. Żyje tylko w tym jednym pliku i w następnym wydaniu danych może być inny.
  • lokalnyId razem z przestrzenNazw (PL.PZGiK.753.EGiB) i wersjaId — identyfikator trwały, jednoznaczny w skali kraju, z datą wersji.
  • idDzialki — 041905_2.0017.1, czyli to, co geodeta nazywa identyfikatorem działki: TERYT jednostki ewidencyjnej, numer obrębu, numer działki.

Kiedy w zgłoszeniu pojawia się „identyfikator się nie zgadza", warto najpierw ustalić, o którym z tych trzech jest mowa.

Kody są liczbami

Prawie żadna cecha opisowa nie jest w pliku słowem. rodzajWladania to 7, grupaRejestrowa to 7, rodzajStabilizacji to 1, a użytek w klasoużytku to dr. Znaczenia tych liczb nie ma w pliku — są w słownikach z rozporządzenia, które narzędzie musi mieć wbudowane.

Dlatego surowy plik otwarty w czymkolwiek uniwersalnym daje tabelę liczb, z której nic nie wynika, a to samo w narzędziu znającym słowniki czyta się jak wypis. Różnica nie jest w pliku, tylko w tym, co o pliku wie program.

Największy problem: jedna rzecz, dziewięć nazw

Tu dochodzimy do rzeczy, której nie widać, dopóki nie zacznie się czytać plików z różnych ośrodków. Każdy obiekt ma zapisane, od kiedy obowiązuje i czy nie jest już historyczny. Pole jest jedno, ale nazywa się różnie w zależności od schematu i systemu, w którym plik powstał.

Na początek wersji spotyka się startObiekt, poczatekObiekt, startWersjaObiekt, startWersjiObiektu, poczatekWersjiObiektu i waznoscOd. Na koniec — koniecObiekt, koniecWersjaObiekt, koniecWersjiObiektu, koniecWersjaObiektu i waznoscDo. Narzędzie, które ma czytać pliki z całej Polski, musi przyjmować wszystkie te warianty.

I to nie jest akademickie, bo od tego zależy, co zobaczysz na mapie:

  • wypełniony koniec obiektu oznacza obiekt usunięty — nie powinien być w ogóle rysowany;
  • wypełniony koniec wersji oznacza wersję historyczną — obiekt istnieje, ale w nowszym kształcie, który też jest w pliku.

Narzędzie, które tego nie odfiltruje, pokaże podwójne granice i o kilkanaście procent za dużo działek. Jeśli kiedyś otworzyłeś plik i zobaczyłeś dwie granice przesunięte o pół metra albo tę samą działkę dwa razy w zestawieniu — to nie był błąd ośrodka. To była historia, której nikt nie ukrył.

Czego w pliku nie ma

  • Mapy zasadniczej. Sieci uzbrojenia i obiekty topograficzne to osobne zbiory i osobne pliki. Plik EGiB kończy się na ewidencji.
  • Żadnej informacji o wyglądzie. Ani koloru, ani grubości linii, ani rodzaju kreskowania. Cała kartografia mapy ewidencyjnej jest w rozporządzeniu, nie w pliku — program musi ją znać.
  • Historii zmian. Wersje obiektów owszem, ale co, kiedy i czyją decyzją się zmieniło — nie.
  • Gwarancji kompletności. Pola opcjonalne każdy ośrodek wypełnia po swojemu. Jeden poda adres budynku, drugi zostawi element pusty, trzeci nie wstawi go wcale. Dla narzędzia to trzy różne sytuacje i stąd bierze się większość różnic między powiatami.

Jak zajrzeć do swojego pliku w dwie minuty

Bez żadnych narzędzi, w edytorze tekstu. Nie w systemowym notatniku — plik obrębowy go zabija, bo bywa zapisany w kilku bardzo długich liniach. Notepad++ albo Visual Studio Code, z włączonym zawijaniem wierszy.

  1. xmlns:egb — wersja schematu. Z „I" czy bez.
  2. srsName — układ. Jeśli nie ma ani jednego wystąpienia, to jest pierwszy powód kłopotów.
  3. <egb:EGB_DzialkaEwidencyjna — policz wystąpienia. Tyle masz działek, razem z historycznymi.
  4. koniecWersj i koniecObiekt — jeśli coś się znajdzie, w pliku są obiekty historyczne albo usunięte.
  5. <egb:EGB_OsobaFizyczna — czy w pliku są dane podmiotów. Jeśli tak, traktuj go jak dokument z danymi osobowymi, bo nim jest.

Jeśli chcesz zobaczyć to samo jako mapę i wypis, bez instalowania czegokolwiek — po to napisałem przeglądarkę GML online. Plik nie jest nigdzie wysyłany, całe czytanie odbywa się w pamięci Twojej przeglądarki, a opis możliwości jest na stronie czytnika plików GML. Jeśli natomiast szukasz przeglądu samych sposobów otwarcia pliku, to jest osobny tekst: czym otworzyć plik GML.

Najczęstsze pytania

Czy plik GML EGiB można otworzyć w notatniku?

Tak, bo to zwykły plik tekstowy. Ale systemowy notatnik nie poradzi sobie z plikiem obrębowym mającym kilkadziesiąt megabajtów i zapisanym w kilku bardzo długich liniach. Do zajrzenia nadaje się Notepad++ albo Visual Studio Code, z włączonym zawijaniem wierszy.

Dlaczego w pliku GML nie widzę właściciela działki?

Bo przy działce go nie ma. Dane podmiotu są oddzielone od działki łańcuchem czterech obiektów: działka wskazuje jednostkę rejestrową, do jednostki rejestrowej odnosi się udział we własności, a udział wskazuje podmiot. Narzędzie, które czyta tylko działki, pokaże brak danych właściciela przy pliku, w którym właściciele są.

Co znaczy przestrzeń nazw ewidencjaGruntowBudynkow bez litery I?

To starszy schemat ewidencji, w którym obiekty mają inne nazwy i inny sposób zapisu informacji o wersji. Część ośrodków nadal wydaje w nim dane. Narzędzie przygotowane tylko pod aktualny schemat ewidencjaGruntowIBudynkow otworzy taki plik i pokaże pustą mapę.

Czy plik GML z ewidencji zawiera dane osobowe?

Tak, i więcej, niż się zwykle sądzi. Oprócz imienia i nazwiska są w nim imiona ojca i matki, adres zameldowania podmiotu oraz numer księgi wieczystej przy działce. Dlatego takiego pliku nie wysyła się na obce serwery ani nie przekazuje dalej bez zastanowienia.

Na koniec

Napisałem ten tekst, bo przez rok czytania cudzych plików zebrałem listę rzeczy, których nigdzie nie było opisanych po ludzku, a każda z nich kiedyś kogoś zablokowała na pół dnia. Jeśli w Twoim powiecie plik wygląda inaczej, niż tu opisałem — a jestem przekonany, że w którymś wygląda — napisz do mnie i podaj powiat. Takie zgłoszenia są najcenniejsze, bo po nich wychodzą poprawki i po nich rośnie ta lista.

Autor: Bartosz Bolek, geodeta uprawniony. Tekst powstał przy okazji pisania darmowego czytnika plików GML, który udostępniam w tym serwisie. Wszystkie dane w przykładach są fikcyjne.