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.
Dodanie danych wejściowych
Dodajmy dane wejściowe jako format wybierzmy Esri Shapefile i wskażmy położenie danych na dysku.
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.
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.
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.
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.
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
Wynik
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