Skip to main content

Tworzenie poligonów z fragmentów linii

By 15 lutego, 201920 maja, 2020Jak to działa w FME? / Tips & Tricks FME
fme_poligony

Poligony w FME można stworzyć używając polilinii lub obiektów liniowych, oraz funkcji AreaBuilder. Sieć drogowa, w tym przypadku sieć tras rowerowych jest zbiorem topologicznie połączonych obiektów liniowych, więc funkcja AreaBuilder jest w stanie stworzyć z niej poligony. 

Dane 

Będziemy pracować na pliku SHAPE z trasami rowerowymi z Wrocławia, które można pobrać z tej strony.

Wykonanie 

Uruchomienie FME Workbench i stworzenie skryptu
Włączmy FME Workbench otwórzmy nowy skrypt.

poligony_fme (1)Dodanie danych wejściowych
Dodajmy dane wejściowe jako format wybierzmy Esri Shapefile i wskażmy położenie danych na dysku.

poligony_fme (2)

Dodanie funkcji AreaBuilder
Dodajmy do skryptu funkcję AreaBuilder i wejdźmy w jej parametry.
Odznaczmy pole Create Donuts, aby nie pozwolić na tworzenie poligonów z dziurami.
W ustawieniach trybu akumulacji atrybutów (Attribute Accumulation) domyślnie jest Use Attributes From One Feature, czyli całemu poligonowi zostaną przypisane atrybuty z jednej tworzącej go linii. Trasy rowerowe mają trzy atrybuty – długość, kierunek i  typ ścieżki. Długość trzeba będzie policzyć na nowo, a długość i typ nie będą nam potrzebne. Ustawmy więc Drop Incoming Attributes, ponieważ nie chcemy zachować atrybutów. 
Zaznaczmy, że chcemy wygenerować listę (Generate List) i nazwijmy ją „długości”. Do listy dodawajmy tylko wybrane atrybuty. Wybierzmy atrybut SHAPE_LEN. Spowoduje to, że każdy stworzony obiekt będzie miał listę, na której będą długości tworzących go linii. Użyjemy tego do policzenia obwodu każdego poligonu. 

poligony_fme (3)

Stworzenie identyfikatora dla poligonów
Dodajmy funkcję Counter za funkcję AreaBuilder i wejdźmy w jej parametry. 
Zmieńmy nazwę tworzonego atrybutu na PoligonID. Będzie to autonumerowany identyfikator dla stworzonych wcześniej poligonów. Resztę parametrów zostawmy domyślnie. 

poligony_fme (4)
Policzenie obwodu poligonów
Za funkcją Counter dodajmy funkcję ListSummer i wejdźmy w jej ustawienia. Jako źródłową listę wybierzmy dlugosc{}.SHAPE_LEN i nazwijmy zsumowany atrybut „obwod”.
Funkcja dla każdego poligonu zsumuje elementy listy z długościami linii, przez co uzyskamy atrybut, który będzie dla każdego poligonu trzymał jego obwód.  

poligony_fme (5)

Zachowanie części atrybutów
Dodajmy funkcję AttributeKeeper i wejdźmy w jej ustawienia.
Do zachowania zostawmy atrybuty tylko obwod i PoligonID. 

Zapisywanie danych wyjściowych
Dodajmy adapter zapisujący, format ustawmy na Esri Shapefile, wskażmy miejsce na dysku i zmieńmy definicję pliku na automatyczną. Dzięki temu sami możemy nazwać plik. Definicja atrybutów też będzie automatyczna. Spowoduje to, że każda zmiana w skrypcie wpływająca na atrybuty (na przykład dodanie, zmiana nazwy, usunięcie) zostanie odnotowana i wzięta pod uwagę przy tworzeniu definicji zapisywanego pliku. Nadajmy warstwie nazwę. 

Uruchomienie skryptu
Uruchommy skrypt. 

poligony_fme (6)Po uruchomieniu skryptu możemy obejrzeć wyniki klikając w adapter zapisujący i ikonę z lupką. Jak widać, udało nam się stworzyć poligony i policzyć dla każdego z nich obwód. Takie poligony w dalszej pracy można wykorzystać do analizy dostępności ścieżek, na przykład poprzez analizę buforową. 

Wejście danych 

poligony_fme (7)Wynik  

 poligony_fme (8)

Użyte Funkcje

  • AreaBuilder – Tworzy topologicznie poprawne obiekty poligonowe z topologicznie połączonych obiektów liniowych, tworzących zamknięte figury. 
  • Counter – Tworzy nowy atrybut z numerem kolejnym obiektu. Funkcja numeruje obiekty. 
  • ListSummer – Wylicza sumę wartości atrybutów elementów listy 
  • AttributeKeeper – Usuwa wszystkie atrybuty i listy atrybutów z obiektu, z wyjątkiem tych, które zostały wskazane