Dostałem kolejne ciekawe pytanie z sali – strażacy są jednak źródłem ciągłej inspiracji 😉 W trakcie przygotowania zapytań PostGIS do zaprezentowania przykładowego rozwiązania natknąłem się jednak na GEOS Topology Exception – non-noded intersection, albo self intersection. To typowy problem z danymi przestrzennymi Państwowego Rejestru Granic. Spróbujemy zlokalizować, a być może i naprawić problemy.

Pierwszy krok to w naszym przypadku to ustalenie gdzie leży problem. W tym celu skorzystajmy z PostGISowych funkcji ST_IsValid, ST_IsValidReason, oraz ST_IsValidDetail. Pierwsza z nich jako wynik zwraca informację czy geometria jest poprawna w rozumieniu modelu OGC.

SELECT ST_IsValid(geometry) FROM table;

Kolejna z funkcji oprócz zerojedynkowego wskazania poprawności podaje jeszcze informacje o problemie jaki występuje.

SELECT ST_IsValidReason(geometry) FROM table;

Ostatnia z funkcji jest najbardziej bogata w informacje. W wyniku zwraca wiersz ze zbiorem informacji valid (boolean), problem (varchar), lokalizacja (geometry).

SELECT ST_IsValidDetail(geometry) FROM table;

Mamy już wiedzę o dostępnych funkcjach sprawdzających. Przetestujmy je na realnym zestawie danych – Obrębach ewidencyjnych z Państwowego Rejestru Granic.

SELECT fid, geometry,
jpt_kod_je AS teryt, jpt_nazwa_ AS nazwa,
ST_IsValidReason(geometry) AS jakosc
FROM bdl.obreby;

Wynik tego zapytania w QGIS pokazuje 7 obiektów błędnych. Wciąż jednak dokładna lokalizacja problemu może nie być oczywista.

Podejście drugie, z pełniejszą informacją o problemie:

SELECT row_number() OVER () AS _qgisid,
reason(ST_IsValidDetail(geometry)) AS jakosc,
location(st_isvalidDetail(geometry)) AS geometry
FROM bdl.obreby WHERE ST_IsValid(geometry)=False;

Warstwy błędnych poligonów i ich lokalizacji

No i jesteśmy w domu. Czas zacząć naprawy. Tu niestety narzędzia automatyczne najczęściej nie dają dobrych wyników – trzeba skorzystać z wyjątkowo mało „sztucznej” inteligencji – percepcji GISowca. Jeszcze tylko rzut oka na kwiatki w oficjalnych państwowych rejestrach.

Najczęstszy błąd geometrii

Samoprzecinający się poligon

Kiedyś wymyślono multipoligony

Jeśli pytacie co sądzę o jakości PRG, to moja odpowiedź może być tylko jedna: GUGiK go home, you’re drunk!!