Z powodzeniem załadowałem kilka plików kształtów do bazy danych PostGIS. Chciałbym móc pobierać określoną geometrię i warstwy jako pliki dxf na podstawie zapytań SQL.
Używam PostGIS, GDAL, PostgreSQL i Python z pakietu OSGeo4W w systemie Windows.
Wyobrażam sobie, że powinienem używać ogr2ogr trochę tak:
$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"
ale kiedy robię to z odpowiednimi wartościami, pojawia się szereg błędów takich jak ten:
ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created.
Powoduje błąd dla każdej kolumny atrybutu w warstwie some_table
Ale dostaję plik dxf.
Jeśli już utworzyłem plik .dxf i ponownie uruchomiłem powyższe polecenie (w tym -overwrite
opcję), zamiast tego pojawia się ten błąd:
Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.
Sprawdziłem już, aby upewnić się, że GDAL_DATA
zmienna środowiskowa jest ustawiona poprawnie. (do C:\OSGeo4W\share\gdal
)
Z pewnością możliwe jest, że podchodzę do tego zadania niepoprawnie, ponieważ jestem nowy we wszystkich tych narzędziach, dlatego jestem otwarty na wszelkie sugestie i wskazówki dotyczące tworzenia plików .dxf z danych GIS przechowywanych w PostgreSQL na podstawie zapytań SQL.
Odpowiedzi:
Benzoes,
DXF (jak przypuszcza OGR) nie obsługuje dowolnych atrybutów GIS. Ma ustalony schemat, który wygląda następująco:
i tylko kilka z nich jest sprawdzanych podczas pisania. Najprościej jest po prostu użyć metody -skipfailures, chociaż wydaje się, że tłumaczenie trwa mimo błędów, nawet bez tego.
Podobnie jak w przypadku -overwrite - dotyczy formatów obsługujących usuwanie warstw, których DXF nie obsługuje. Po prostu wstępnie usuń istniejący plik DXF przed uruchomieniem ogr2ogr.
źródło
z odpowiedzią Franka i wskazówką z „GIS-Kompetenzzentrum” miasta Uster (tylko w języku niemieckim)
http://gis.uster.ch/dokumentation/datenkonvertierung/ogr
Doszedłem do wniosku, że PostGIS na dxf można wykonać w następujący sposób:
Instrukcja sql na końcu utworzona dla każdego wiersza w $ COLUMN $ an Layer. Dlatego najlepiej będzie wybrać identyfikator $ COLUMN $, jak identyfikator lub odpowiednią nazwę.
Wypróbowałem to na stole wielokątnym 2D. Plik dxf nie zamknął polilinii. Być może można dodać coś takiego jak „$ polygon $ as Linetype” do ciągu sql.
Jeśli chcesz mieć wszystkie geometrie z tabeli na jednej warstwie, możesz użyć kodu z „GIS-Kompetenzzentrum” Uster
Do obu instrukcji możesz dodać następującą opcję:
jeśli chcesz ograniczenia przestrzenne.
źródło
To, co powiedział Frank, będzie moją sugestią.
Utwórz dxf z nazwami warstw już w nim używanymi i użyj go jako szablonu.
źródło