Conversia datelor din CSV în geometrie spațială

By decembrie 1, 2020ianuarie 13th, 2021ETL, FME Desktop, FME Server
fme dane geometryczne

În acest articol vă vom arăta cum să convertiți datele din fișiere CSV în obiecte punct utilizând parametrii CSV Reader încorporați și transformatorul VertexCreator

Conversia de la CSV la obiecte de tip punct, linie sau zonă/poligon este ușoară atâta timp cât aveți date spațiale, cum ar fi informații despre latitudine și longitudine, în CSV. Dacă în fișierul CSV există adrese în loc de coordonate, puteți utiliza geocodarea descrisă de noi aici. De asemenea, vom converti CSV în obiecte de tip linie și poligoane folosind transformatoarele VertexCreator și LineBuilder.

Partea 1: obiecte de tip punct

Din fișierul CSV care conține coordonatele, vom crea obiecte punct folosind cele două metode menționate anterior:

  • prin utilizarea parametrilor cititorului,
  • prin utilizarea VertexCreator.

Pentru a crea obiecte punct vom folosi cele două metode menționate mai sus. Puteți utiliza atât metoda 1, cât și metoda 2. Metoda unu va fi mai bună dacă aveți deja datele pregătite pentru a crea puncte, iar metoda a doua va funcționa dacă mai întâi trebuie să efectuați transformarea sau validarea datelor.

Metoda 1: utilizarea parametrilor Reader

După deschiderea FME Desktop și crearea unui script gol, adăugați Reader CSV și selectați fișierul rapid_transit_stations.csv. Vom seta sistemul de coordonate adecvat, adică UTM83-10, și să introducem parametrii Reader. În zona Attribute Definition, selectați opțiunea Manual. Apoi setăm câmpurile x și y (lungime și lățime) la tipul de date coordonate x / y. Acceptați parametrii și setările Reader pentru a adăuga date de intrare.

Metoda 2: Utilizați transformatorul VertexCreator

După deschiderea FME Desktop și crearea unui script gol, adăugați Reader CSV și selectați fișierul rapid_transit_stations.csv. Ssetăm sistemul de coordonate adecvat, adică UTM83-10 și acceptăm. După adăugarea Reader-ului vom adăuga transformatorul VertexCreator, care creează o reprezentare punctuală a fiecărei înregistrări folosind valorile X / Y / Z sau latitudine / longitudine / latitudine din atribute. Fiecare element punct reține toate atributele elementului original non-geometric.

Să mergem la parametrii funcției și să ne asigurăm că modul este setat pentru a adăuga puncte noi și a completa parametrii valorilor X și Y indicând atributele x și y.

Partea a 2-a: obiecte liniare

Obținerea caracteristicilor liniei este un proces în doi pași. În spațiul de lucru, să adăugăm Reader CSV și fișierul rapid_transit_lines.csv. Apoi setăm sistemul de coordonate adecvat, adică UTM83-10. Apoi creați puncte urmând metoda 1 sau 2 descrisă în partea 1: caracteristici punct.

Odată ce avem caracteristici punctuale, adăugați transformatorul LineBuilder și conectați-l la CSV Reader sau la transformatorul VertexCreator, în funcție de metoda de obținere a punctelor. Să introducem parametrii funcției LineBuilder și să setăm atributul Group By la LINE. Aceasta spune funcției să oprească punctele de conectare atunci când atributul LINE se schimbă. În acest exemplu, veți vedea trei linii diferite.

Dacă nu se produc linii conform așteptărilor, va trebui să sortați punctele după un anumit atribut folosind transformatorul Tester. Acest lucru se datorează faptului că FME conectează punctele la linii exact în aceeași ordine în care obiectele punct intră în funcția LineBuilder.

Așa arată scriptul în care am folosit metoda 2 pentru a crea puncte (în funcția VertexCreator) și apoi le-am conectat în linii (cu funcția LineBuilder):

Așa arată liniile rezultate:

Partea 3: obiecte tip zonă (poligoane)

Pentru a obține elemente poligonale vom adăuga un alt pas la metoda de creare a liniei, care este conexiunea la linie. Adăugați Reader CSV la scriptul gol pentru fișierul NeighborhoodNames.csv și setați sistemul de coordonate LL84. Apoi vom urma metoda 1 sau 2 din partea 1 pentru a obține caracteristici punctuale. În pasul următor – ca și în partea 2 – vom adăuga un transformator LineBuilder pentru a construi linii din punctele pe care le aveți. Să introducem parametrii LineBuilder și apoi să setăm parametrul Group By la atributul NeighborhoodName. În setul nostru, ultimul punct este același cu primul – funcția creează apoi automat un poligon.

Așa arată scriptul în care am folosit metoda 2 pentru a crea puncte (în funcția VertexCreator) și apoi le-am combinat în poligoane (cu funcția LineBuilder):

Iată cum arată poligoanele rezultate: