Wiem, moje pytanie jest podobne do niektórych starych na tej stronie.
Mam dużo plików CSV (współrzędne geograficzne) do zaimportowania do qgis (a następnie do ich konwersji), a zwykły sposób nie jest najlepszym sposobem (zbyt długim).
Mam prawie 500 plików CSV (współrzędne wgs84) i chcę to zrobić:
- Zaimportuj wszystkie pliki CSV jednocześnie do QGIS
- Wyświetl je
- Wyeksportuj je do plików CSV (ponownie), ale z różnymi współrzędnymi (konwersja do UTM33N)
Próbuję zrozumieć, jak korzystać z konsoli python, ale nie przechodzę dalej :(
Czy ktoś może mi wyjaśnić, jak to zrobić krok po kroku?
Odpowiedzi:
Jeśli chcesz ponownie wyrzucić pliki csv z konsoli Python w QGIS, możesz użyć następującego skryptu. Wszystko, co musisz zmienić, to trzy ścieżki wymienione w komentarzach.
Zasadniczo skrypt importuje pliki csv do QGIS jako pliki kształtów (zakładając, że twoje pola geometryczne są nazwane
X
iY
). Następnie korzysta z algorytmówqgis:reprojectlayer
iqgis:fieldcalculator
z przybornika przetwarzania, aby zmienić projektX
i zaktualizowaćY
pola i o nowe współrzędne. Następnie zapisuje je w folderze i konwertuje je na pliki csv w określonej ścieżce. W końcu zaktualizowałeś pliki shapefile i pliki csv w osobnych folderach.Mam nadzieję że to pomoże!
źródło
Szybkie rozwiązanie do transformacji pliku rozdzielanego spacjami zawierającego „lon lat” w WGS84 na UTM33N, ale nie otrzymujesz żadnych innych danych:
To działa i zachowuje kolejność danych, więc może kolejna pętla używa np. Awk do łączenia danych opisowych ze współrzędnymi?
Edytować. Ze względu na niechlujne komentarze, które napisałem poniżej, zmienię tutaj odpowiedź.
Poniższy skrypt powinien wykonać zadanie odczytu wielu plików csv, dodając nowe kolumny współrzędnych do każdego pliku.
W OSX musisz zainstalować najnowszą (2009) wersję sed i użyć pierwszej, niekomentowanej linii w pętli. W przypadku Linuksa skomentuj pierwszy i użyj drugiego. Dostosuj
-F " "
zgodnie z formatem separatora w plikach csv, np.-F ","
Dla separatora przecinkowego. Zwróć też uwagę, że transformacja elewacji dotyczy elipsoidy, a nie geoidy, więc pamiętaj o odpowiedniej transformacji wysokości.źródło
paste -d',' ${i} <(awk -v OFS="," -F " " 'NR>1 {print $1 " " $2}' ${i} | gdaltransform -s_srs EPSG:4326 -t_srs EPSG:32633 | awk '{gsub(" ",",",$0); print $0}' | /usr/local/bin/sed "1i\X,Y,Z") > utm${i}
Zamień / usr / local / sed na tylko sed, jeśli nie korzystasz z OSX. Nie jest to idealne, jeśli twoje pliki csv są rozdzielone spacjami, jak zakłada powyższy wiersz, ale działa. Jeśli-F " "
-F ","
Używanie qgis lub nawet OGR to przesada.
Użyj
pyproj
( https://pypi.python.org/pypi/pyproj ) w połączeniu z pisarzem csv Python i kilkoma standardowymi sztuczkami bibliotecznymi. Nie musisz instalować niczego pozapyproj
tym!źródło
pyproj
należy zainstalować osobno na plakat, czy już tam jest.Nie potrzebujesz pytona. Wystarczy użyć wiersza polecenia i ogr2ogr. W twoim przypadku najważniejszy jest parametr -t_srs srs_def.
Wyjaśniono to już w odpowiedzi na pytanie Jak przekonwertować plik programu Excel z kolumnami x, y na plik kształtu?
AKTUALIZACJA Nie mam czasu na napisanie pełnego kodu. Problemem będzie jednak to, że potrzebuje trochę więcej kodu w pythonie, niż może się wydawać.
Twoim głównym problemem będzie to, że praca z plikami csv nie jest tak wygodna, jak używanie plików kształtów. Dlatego najpierw musisz przekonwertować plik csv do kształtu, który wymaga pliku VRT. Wyjaśnia to pierwszy link. W tym miejscu musisz napisać pętlę skryptów Pythona, która automatycznie generuje pliki vrt.
To jest skrypt, którego sam użyłem. Musisz sprawdzić, czy to działa dla Ciebie. Dołączyłem już konwersję z WGS 84 do UTM 33N
Trzeba dostosować parametry do nazwy pola , src , X i Y zgodnie z pliku csv.
AKTUALIZACJA 2
Po namyśle zastanawiam się, dlaczego w ogóle chcesz korzystać z QGIS? Można użyć skryptu Pythona, jak to się bezpośrednio konwertować współrzędne z WGS do UTM. W tym przypadku jest to prosty otwarty plik csv, odczyt współrzędnych, transformacja współrzędnych i zapisanie jej w nowym pliku.
źródło