Z tego artykułu dowiesz się, jak używać FME do wykrywania błędów topologicznych z użyciem funkcji SpatialFilter, oraz jak je naprawić funkcją AnchoredSnapper.
Część pierwsza – znajdowanie topologicznych błędów obiektów liniowych
Dane
Będziemy pracować na pliku SHAPE z trasami rowerowymi z Wrocławia, które można pobrać stąd.
Wykonanie
Uruchomienie FME Workbench i stworzenie skryptu.
Dodanie danych wejściowych
Dodajmy dane wejściowe, jako format wybierzmy Esri Shapefile i wskażmy położenie danych na dysku.
Dodanie funkcji SpatialFilter
Dodajmy do skryptu funkcję SpatialFilter i podłączmy TrasyRowerowe do obu portów wejściowych – filtrującego (Filter), oraz filtrowanego (Candidate). W tej funkcji każdy obiekt filtrowany (Candidate) jest geometrycznie analizowany względem obiektów filtrujących (Filter). W tym przypadku wszystkie obiekty będą analizowane względem wszystkich obiektów.
Wejdźmy w ustawienia funkcji dwukrotnie klikając w funkcję lub klikając w ikonę koła zębatego. Kliknijmy w wybór predykatu przestrzennej relacji (Spatial Predicates to Test) i wybierzmy, że obiekt filtrujący ma dotykać obiekt filtrowany (Filter Touches Candidate). Oznacza to, że końce linii muszą się stykać.
Resztę parametrów zostawmy domyślnie.
Dodanie wyjścia do Przeglądarki
Kliknijmy prawym przyciskiem myszy na wyjściowy port z obiektami, które pozytywnie przeszły przez filtr (Passed) i dodajmy wyjście na Przeglądarkę. Kliknijmy w ikonę z kołem zębatym, aby zmienić nazwę na „Połączone”. Analogicznie zróbmy z portem wyjściowym Failed, tylko nadajmy nazwę „Odłączone”.
Uruchomienie skryptu
Wejście danych
Wyjście danych
Część druga – naprawianie błędów topologii
Dodanie funkcji AnchoredSnapper
Chcemy poprawić błędy topologiczne wynikające z niespójności sieci tras rowerowych. Zrobimy to funkcją AnchoredSnapper, która dociąga geometrię obiektów do nieruchomych obiektów referencyjnych. Ma ona dwa porty wejściowe – obiekty referencyjne, nieruchome (Anchored), oraz te które będą do nich dociągane (Candidate).
Dodajmy funkcję AnchoredSnapper.
Obiekty, które są podłączone do sieci będą tymi referencyjnymi, do nich będziemy dociągać te niepodłączone. Do portu wejściowego Anchor podłączmy więc obiekty z portu wyjściowego Passed funkcji SpatialFilter, a do portu Candidate te z portu Failed.
Wejdźmy w ustawienia funkcji AnchoredSnapper i ustawmy typ snapowania na Vertex Snapping, czyli dociąganie nie tylko do punktów końcowych, ale do wszystkich werteksów.
Ustawmy odległość dociągania na 5. Ta odległość jest mierzona w jednostkach mapy, w tej sytuacji są to metry. Resztę parametrów zostawmy domyślnie.
Uruchomienie skryptu
Dodajmy wyjścia na Przeglądarkę z funkcji AnchoredSnapper (na przykład przez kliknięcie prawym przyciskiem w funkcję i wybranie Connect Inspectors). Uruchamiamy skrypt.
Dla przypomnienia, przytoczymy wszystkie użyte funkcje
- SpatialFilter – Filtruje obiekty w oparciu o relacje przestrzenne. Każdy filtrowany obiekt CANDIDATE jest geometrycznie analizowany względem obiektów filtrujących FILTER i zadanego predykatu przestrzennej relacji.
- AnchoredSnapper – Zakotwiczone dociąganie. Dociąga geometrię obiektów do nieruchomych obiektów referencyjnych uwzględniając określoną tolerancję działania.
Pracujesz z dużą ilością danych geograficznych i masz problem z ustaleniem i naprawieniem błędów topologicznych? Skontaktuj się z nami – pokażemy Ci, jak FME może wesprzeć Twoje działania.