Ich habe erfolgreich eine Reihe von Shapefiles in eine PostGIS-Datenbank geladen. Ich möchte in der Lage sein, bestimmte Geometrien und Ebenen als DXF-Dateien basierend auf SQL-Abfragen abzurufen.
Ich verwende PostGIS, GDAL, PostgreSQL und Python aus der OSGeo4W-Suite unter Windows.
Ich stelle mir vor, dass ich ogr2ogr ein bisschen so verwenden sollte:
$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"
Aber wenn ich das mit den entsprechenden Werten mache, erhalte ich eine Reihe solcher Fehler:
ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created.
Dies führt zu einem Fehler für jede Attributspalte in der Ebene. some_table
Ich erhalte jedoch eine DXF-Datei.
Wenn ich bereits eine DXF-Datei erstellt habe und den obigen Befehl (einschließlich der -overwrite
Option) erneut ausführe, wird stattdessen der folgende Fehler angezeigt :
Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.
Ich habe bereits überprüft, ob die GDAL_DATA
Umgebungsvariable richtig eingestellt ist. (zu C:\OSGeo4W\share\gdal
)
Es ist durchaus möglich, dass ich mich dieser Aufgabe falsch nähere, da ich mit all diesen Tools noch nicht vertraut bin. Daher bin ich offen für Vorschläge und Tipps zum Erstellen von DXF-Dateien aus GIS-Daten, die in PostgreSQL basierend auf SQL-Abfragen gespeichert sind.
Antworten:
Benjamin,
DXF (wie von OGR angenommen) unterstützt keine beliebigen GIS-Attribute. Es hat ein festes Schema, das wie folgt aussieht:
und nur wenige davon werden tatsächlich beim Schreiben geprüft. Am einfachsten ist es, nur die Methode -skipfailures zu verwenden, obwohl es den Anschein hat, als würde die Übersetzung trotz der Fehler auch ohne diese Methode fortgesetzt.
Wie für -overwrite - gilt dies für Formate, die das Löschen von Ebenen unterstützen, was DXF nicht tut. Löschen Sie einfach die vorhandene DXF-Datei vor, bevor Sie ogr2ogr ausführen.
quelle
mit der Antwort von Frank und dem Hinweis vom "GIS-Kompetenzzentrum" der Stadt Uster (nur in deutscher Sprache)
http://gis.uster.ch/dokumentation/datenkonvertierung/ogr
Ich habe herausgefunden, dass PostGIS zu dxf so gemacht werden kann:
Die SQL-Anweisung am Ende wurde für jede Zeile in $ COLUMN $ an Layer erstellt. Wählen Sie daher am besten eine $ COLUMN $ -ähnliche ID oder einen relevanten Namen aus.
Ich habe es mit einer 2D-Polygontabelle versucht. Die dxf-Datei hat keine Polylinien geschlossen. Vielleicht ist es möglich, der SQL-Zeichenfolge etwas wie "$ polygon $ as Linetype" hinzuzufügen.
Wenn Sie alle Geometrien aus Ihrer Tabelle auf einer Ebene haben möchten, können Sie den Code aus dem "GIS-Kompetenzzentrum" von Uster verwenden
Zu beiden Anweisungen können Sie die folgende Option hinzufügen:
wenn Sie eine räumliche Einschränkung wünschen.
quelle
Was Frank sagte, würde mein Vorschlag sein.
Erstellen Sie eine DXF mit Ihren Ebenennamen und verwenden Sie diese als Vorlage.
quelle