Narzędzia do automatyzacji rozwiązywania zadań dotyczących zarządzania LMN

Czy warto poświęcić czas na nauczenie się pisania skryptów w Pythonie?

Gospodarowanie przestrzenią oraz monitorowanie przemian zachodzących w otaczającym nas środowisku to temat niezmiernie ważny i aktualny. W nowoczesnym i zrównoważonym leśnictwie, zarządzaniu środowiskiem przyrodniczym czy ochronie przyrody, zasobów naturalnych i krajobrazu coraz częściej stosowane są technologie geoinformatyczne. Monitorowanie zmian w pokryciu i użytkowaniu terenu w tym m.in. w zakresie rozwoju zbiorowisk roślinnych o charakterze leśnym to jeden z elementów obserwowania przemian zachodzących w środowisku, w którym zasadne wydaje się wskazanie możliwości automatyzacji i stosowania najnowszych technologii i geodanych.

Dla potrzeb efektywnego rozwiązywania zadań związanych z obsługą leśnej mapy numerycznej (LMN) na poziomie regionalnej dyrekcji lasów państwowych, z powodu ich czasochłonności i powtarzalności niezbędna stała się automatyzacja. W skład RDLP w Katowicach wchodzi 38 nadleśnictw, zasięg terytorialny obejmuje w całości województwa śląskie i opolskie oraz fragmenty łódzkiego, małopolskiego i świętokrzyskiego. Liczba jednostek organizacyjnych Lasów Państwowych, liczba jednostek podziału administracyjnego kraju oraz struktura leśnej mapy numerycznej, w której obiekty geometryczne są podzielone na około 40 tematycznych warstw pochodnych powodują znaczne obciążenie pracą przy ich ręcznym przetwarzaniu. Sama operacja połączenia 40 warstw pochodnych z 38 jednostek może zająć sporo czasu, a wykonywanie jej ręcznie może prowadzić do pomyłek i błędnych warstw wynikowych.

Z pomocą w tej sytuacji może przyjść stworzenie skryptu w języku Pyton. Oczywiście na początek można posłużyć się gotowymi rozwiązaniami lub ModelBuilder’em, jednak użycie Pythona daje większą kontrolę nad sposobem działania skryptu.

Scalanie

Na potrzeby łączenia warstw opracowany został dodatek do ArcMap (Esri ArcGIS Add-In) służący do przeszukiwania wskazanego w ArcCatalog folderu i umożliwiający połączenie warstw z kilku podkatalogów w jedną scaloną warstwę. Realizację zadania ułatwia narzucone przez standard leśnej mapy numerycznej nazewnictwo warstw pochodnych. Narzędzie przeszukuje wskazany folder. Z kolei interfejs narzędzia pozwala na wybranie podkatalogu, w którym znajdują się warstwy (najczęściej pochodne) oraz nazwy warstwy, która ma być połączona. Przed wykonaniem połączenia, lub dołączenia obiektów do istniejącej warstwy, w ArcCatalog należy wskazać folder docelowy. Narzędzie zostało opracowane jako dodatek do ArcMap, ze względu na potrzebę interakcji z interfejsem użytkownika, oraz dostęp do właściwości wybranego w ArcCatalog folderu – GetSelectedCatalogWindowPath. W codziennej pracy z danymi znacząco skraca ono czas łączenia warstw oraz eliminuje pomyłki polegające na braku wybrania warstwy z nadleśnictwa do łączenia lub wybraniu jednej warstwy podwójnie. Warunkiem koniecznym do poprawnego działania narzędzia jest istnienie warstw o takiej samej strukturze i takich samych nazwach w katalogach pochodzących z różnych jednostek, w przypadku LP najczęściej z nadleśnictw. Ilustrację sposobu działania narzędzia i jego interfejs przedstawia rys. 1.

Rys. 1. Scalanie warstw Esri ArcGIS Add-In.

Wycinanie

W przypadkach konieczności udostępniania danych geometrycznych podmiotom zewnętrznym np. gminom lub powiatom, którym zazwyczaj przekazuje się od kilku do kilkunastu warstw pochodnych, zachodzi potrzeba wycięcia z połączonych warstw pochodnych tych części obiektów, które znajdują się w zasięgu terytorialnym wnioskujących podmiotów. W celu automatyzacji tego zadania został opracowany Python Toolbox służący do wycinania zestawu warstw na podstawie geometrii wskazanej warstwy poligonowej. Narzędzie posiada interfejs pozwalający na wybranie warstwy poligonowej, według której będą przycinane obiekty, przy czym przycinanie obejmuje każdy obiekt ze wskazanej warstwy. Warstwy wynikowe są zapisywane w podkatalogach, których nazwy są generowane na podstawie wartości wskazanego atrybutu (pole identyfikatora podkatalogu). Operacji wytnij będą poddane warstwy zdefiniowane w liście warstw. Narzędzie posiada dodatkowe opcje, które umożliwiają uproszczenie geometrii obiektu wycinającego do minimalnego poligonu opisanego na zasięgu obiektu, powiększenie poligonu wycinającego o zadany bufor oraz rozszerzenie nazwy warstwy wynikowej o identyfikator obiektu wycinającego. Interfejs narzędzia przedstawia rys. 2.

Rys. 2. Interfejs narzędzia do wycinania warstw.

Adresowanie

Najbardziej złożonym narzędziem wspomagającym zarządzanie LMN stworzonym w RDLP w Katowicach jest Adresator LMN. Dodatek został opracowany w celu wsparcia operatorów LMN w nadleśnictwach w procesie aktualizacji tej mapy. Jego głównym zadaniem jest obsługa adresowania obiektów z warstw: działek ewidencyjnych, użytków ewidencyjnych oraz wydzieleń. Warstwy te w strukturze aktualizacji w atrybutach mają tylko numery wewnętrzne z bazy Systemu Informatycznego Lasów Państwowych (SILP) łączące geometrię z opisami obiektów z bazy danych. Dla użytkownika końcowego edycja tych atrybutów w formacie liczb całkowitych nie jest intuicyjna, a dodatkowo wykazy numerów wewnętrznych obiektów muszą być otwierane w odrębnych okienkach lub w innych aplikacjach. Dodatek wczytuje do pamięci pliki tekstowe pochodzące z bazy opisowej SILP, a potem na podstawie zależności atrybutowych i geometrycznych podpowiada odpowiednie adresy obiektów użytkownikowi ułatwiając mu aktualizację LMN.

Działanie dodatku oparte jest na funkcji klasy Extension onChangeFeature (self), która przechwytuje i udostępnia właściwości aktualnie wybranego obiektu. Po wybraniu obiektu przez użytkownika skrypt pobiera jego geometrię i identyfikator oraz sprawdza, z jakiej warstwy pochodzi. Na podstawie nazwy tej warstwy ustalany jest kontekst pracy operatora. Skrypt wykonuje identyfikację obiektów zależnych i relacji z nimi, i na ich podstawie proponuje listę możliwych do przypisania obiektowi adresów. Interfejs ograniczony jest do prostego paska narzędziowego, przedstawionego na rys. 3.

Rys. 3. Scalanie warstw Esri ArcGIS Add-In.

Przed przystąpieniem do pracy należy do projektu dodać wymagane warstwy: użytków ewidencyjnych, działek ewidencyjnych, wydzieleń i oddziałów, leśnictw oraz inne warstwy, które mogą być przydatne w czasie aktualizacji leśnej mapy numerycznej. Po dodaniu warstw użytkownik musi wczytać pliki tekstowe, które zawierają informacje opisowe dla wcześniej wspomnianych warstw pochodzące z SILP. Po wykonaniu tych kroków można użyć przycisku etykietuj, który do warstw w strukturze aktualizacji doda i wyświetli etykiety na podstawie adresów czytelnych dla użytkownika.

W przypadku aktualizowania wydzieleń, np. po podziale wynikającym ze zdarzenia gospodarczego, użytkownik wybiera jedno z potomnych wydzieleń (patrz rys. 4.). Aplikacja wykonuje opisane wcześniej operacje i ustala listę adresów leśnych, które są poprawne dla wybranego wydzielenia. Proces ten ogranicza listę adresów z kilku tysięcy do kilku lub kilkunastu, z których użytkownik wybiera właściwy i zapisuje go przyciskiem adresuj. Sposób działania aplikacji dla działek i użytków przedstawiają rys. 5 i 6.

Rys. 4. Adresowanie wydzielenia.

Rys. 5. Adresowanie użytku ewidencyjnego.

Rys. 6. Adresowanie działki ewidencyjnej.

Inne narzędzia

Przez kilka lat posługiwania się ArcMap wspomaganym Pythonem powstało wiele innych narzędzi nieopisanych w tym artykule, np. :

  • Narzędzie sprawdzające poprawność przypisania siedliskowego typu lasu do wydzielenia na podstawie kontroli zgodności warstwy wydzieleń leśnych z warstwami wynikowymi opracowania glebowo siedliskowego.
  • Narzędzie wspomagające interpretację wyników kontroli zgodności LMN nadleśnictwa ze standardem LMN.
  • Narzędzie przypisujące wysokości do wierzchołków (punktów załamań ) dróg leśnych zapisanych zgodnie z modelem docelowej sieci drogowej (DSD) w formacie XML na podstawie rastra NMT.
  • Narzędzie do automatycznej zmiany ścieżki dostępu do warstwy we wszystkich projektach we wskazanym katalogu, używane najczęściej po zmianie komputera, gdy trzeba w ścieżkach dostępu zapisanych projektów zmienić literę dysku np. z „E:/” na „F:/”.
  • Narzędzie do generowania warstw wydzieleń liniowych (z adresami ~) na podstawie warstw standardu LMN i opisów taksacyjnych z bazy SILP. Wydzielenia liniowe są obiektami liniowymi, które posiadają adres leśny i zmniejszają powierzchnię wydzieleń leśnych, ale ze względu na typ obiektu mogą być zapisywane w trzech odrębnych warstwach liniowych.
  • Narzędzie służące do obliczenia wskaźnika odległości wydzieleń leśnych od kancelarii leśnictwa, który jest wykorzystywany corocznie do aktualizacji limitów kilometrów przyznawanych terenowej służbie leśnej na jazdy lokalne.

Podsumowując, każde z powyżej opisanych zadań, których realizacja wspomagana jest skryptami samo w sobie nie jest trudne i niemożliwe do wykonania bez udziału skryptów. Jednak czas zainwestowany w naukę języka i napisanie skryptów znacznie skraca czas wykonywania długotrwałych operacji, szczególnie w przypadkach, gdy wymagają one opracowania dedykowanej procedury postępowania, która zostaje zapisana w skrypcie i można ją wykorzystać w przyszłości. Wracając do problemu po dłuższym czasie nie ma potrzeby odszukiwania notatek mówiących o tym, co i jak zostało zrobione w celu osiągnięcia żądanego efektu. Ważne jest natomiast dokumentowanie skryptów na tyle dobrze, aby była możliwość łatwego przygotowania zestawu danych źródłowych.

Na podstawie własnych doświadczeń gorąco zachęcam do nauki języka Python, gdyż jego znajomość pomaga nie tylko w rozwiązywaniu problemów z wykorzystaniem systemów informacji przestrzennej, ale też i w innych dziedzinach. Ostatnio miałem okazję sprawdzić to po istotnej zmianie zakresu obowiązków służbowych. Gdziekolwiek natrafiamy na potrzebę szybkiego i sprawnego przetworzenia danych, znając język Python możemy szybko i sprawnie przygotować narzędzia wspomagające naszą pracę.