Geokodowanie adresów przy pomocy FME – od danych źródłowych do docelowych

By Luty 4, 2020 Blog, Funkcje FME
geokodowanie FME

Wracamy z naszą serią „Jak to zrobić w FME”. Przedstawiamy tu praktyczne ćwiczenia i przykłady pracy z najpopularniejszymi transformatorami w FME.
Dziś dowiesz się, jak FME radzi sobie z geokodowaniem adresów przy użyciu transformatora Geocoder. FME umożliwia kodowanie w przód, gdzie z adresów generowane są współrzędne geograficzne, albo wstecz – gdzie na podstawie położenia obiektów w terenie pozyskiwana jest informacja o adresie. W ćwiczeniu tym skupimy się na geokodowaniu w przód.

Ćwiczenie

Jako danych wejściowych użyjemy wykazu jednostek organizacyjnych Krakowa w formacie CSV, pobranych ze strony Biuletynu Informacji Publicznej.
W tym scenariuszu wykonamy geokodowanie na podstawie atrybutu adresów szkół w Krakowie. Wszystko po to, aby otrzymać ich współrzędne X i Y w układzie WGS84. Skorzystamy z geokodowania przy użyciu usługi OpenStreetMap.

Wykonanie

  1. Uruchomienie FME Workbench
    Otwórzmy FME Workbench.
  2.  Stworzenie nowego obszaru roboczego
    W sekcji Create Workspace wybierzmy opcję New
WSPÓLNE CECHY OBIEKTÓW
3. Dodanie danych wejściowych

Dodajmy adapter czytający – Reader. Jako format wejściowy ustawmy CSV i wybierzmy pobrany plik z danymi.

Przed zatwierdzeniem wejdźmy w parametry adaptera czytającego – Parameters…
Ustawmy tak, aby pierwszy wiersz danych zawierał nazwy kolumn, a konkretne dane zaczynały się od drugiego wiersza:
W podglądzie (Preview) widać, że polskie znaki nie wyświetlają się prawidłowo. Przyczyną jest ustawienie błędnego rodzaju kodowania. Jeśli po przejrzeniu danych w oknie podglądu stwierdzimy, że wszystko jest poprawnie – pomińmy ten krok.
Aby zmienić metodę kodowania na taką, które umożliwia prawidłowe odczytywanie polskich znaków, otwórzmy zakładkę Advanced. Następnie kliknijmy ustawienia Encoding i w parametrze Character Encoding ustawmy na Unicode 8-bit (utf-8):
Po zmianie ustawień zobaczymy w podglądzie danych, że odczytują się one prawidłowo. Przyciskiem OK zatwierdzamy ustawione parametry i wczytujemy dane.
4. Przegląd danych
Przed przystąpieniem do transformacji przejrzyjmy dostępne dane. W tym celu do adaptera czytającego nasze dane źródłowe podłączmy Inspector. Następnie musimy uruchomić przetwarzanie. Zauważmy, że nasze wejściowe dane tabelaryczne składają się z kilku kolumn, tj. nazwa jednostki, kategoria/podkategoria czy adres lub telefon. W realizacji tego zadania najważniejszym atrybutem będzie adres placówki.

5. Selekcja danych wejściowych
Aby ograniczyć nasze wejściowe dane jedynie do adresów szkół, należy przefiltrować je przy użyciu transformatora Tester. Dodajmy zatem funkcję Tester i połączmy go z wejściowym plikiem CSV. Wejdźmy w parametry transformatora i ustawmy, że atrybut Kategoria/Podkategoria ma wartość Edukacja/Szkoły Podstawowe.

6. Geokodowanie
Dodajmy transformator Geocoder i połączmy go z portem Passed transformatora Tester. Otwórzmy parametry nowo dodanej funkcji i w sekcji Geocoding Service ustawmy usługę na OpenStreetMap. FME umożliwia geokodowanie na podstawie wielu różnych usług. Można o nich przeczytać w dokumentacji transformatora. My wykonamy to zadanie na OpenStreetMap, ponieważ jest to usługa open source, która nie wymaga zakładania konta lub autoryzacji, jak np. w przypadku Google Maps.

W sekcji Geocoding Parameters ustawmy parametr Mode na Forward oraz Street Address na atrybut zawierający adres naszej placówki:

Następnie zatwierdźmy ustalone atrybuty.


7. Uporządkowanie atrybutów obiektu

Do portu wyjściowego transformatora Geocoder dodajmy AttributeManager, który pozwoli nam na zarządzanie wszelkimi atrybutami obiektów. Wejdźmy w jego ustawienia i zmieńmy nazwy atrybutów _latitude oraz _longitude _odpowiednio na ‘Szerokość geograficzna’ i ‘Długość geograficzna’. W tym kroku usuwamy również atrybuty Strona BIP oraz E-mail, a także pozostałe, które powstają wskutek geokodowania.

8. Zmiana parametrów przestrzeni roboczej (Workspace)

Przed uruchomieniem skryptu należy wprowadzić kilka zmian w parametrach przestrzeni roboczej. W oknie nawigatora, w zakładce dotyczącej transformacji, należy tak zmienić ustawienia, aby transformacja była wykonywana podczas pojawienia się obiektu w porcie Rejected:
Navigator Window >> Translation >> Rejected Feature Handling >> Continue to Translation

Domyślnie parametr ten jest ustawiony na Terminate Translation. To powoduje zatrzymanie się procesu, gdy transformator Geocoder odrzuci jakiekolwiek obiekty. Zdarza się to, gdy niektóre adresy zawierają niewidoczne na pierwszy rzut oka błędy, np. podwójna spacja czy błędnie zapisany numer budynku. Takie obiekty zostaną odrzucone przez FME, ale ich ilość lub powód odrzucenia różni się w zależności od wybranej metody geokodowania. Więcej na ten temat można przeczytać w dokumentacji wybranej usługi.
Wykonując to ćwiczenie na danych szkół w Krakowie, na wyjściu funkcji Geocodera otrzymamy 37 odrzuconych adresów oraz 51 adresów zakodowanych prawidłowo.


9. Zapisanie wyników do formatu KML i uruchomienie skryptu

Ostatnim etapem transformacji będzie zapisanie poprawnie zakodowanych adresów do formatu KML. Dodajmy więc adapter zapisujący Google KML i ustawmy nazwę oraz folder docelowego pliku, a także Feature Type Definition na Automatic. Połączmy adapter zapisujący z wyjściowym portem transformatora AttributeManager.
Kiedy uruchomimy nasz skrypt, obejrzyjmy wyniki końcowe:

Całość skryptu powinna wyglądać tak:

Chcesz dowiedzieć się więcej na temat analizy danych przestrzennych za pomocą FME?

Napisz do nas