DXF-Dateien aus PostgreSQL holen

10

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_tableIch erhalte jedoch eine DXF-Datei.

Wenn ich bereits eine DXF-Datei erstellt habe und den obigen Befehl (einschließlich der -overwriteOption) 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_DATAUmgebungsvariable 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.

BenjaminGolder
quelle
fand einen relevanten Link: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

Antworten:

9

Benjamin,

DXF (wie von OGR angenommen) unterstützt keine beliebigen GIS-Attribute. Es hat ein festes Schema, das wie folgt aussieht:

Ebene: String (0.0)
Unterklassen: String (0.0)
ExtendedEntity: String (0.0)
Linientyp: String (0.0)
EntityHandle: String (0.0)

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.

Frank Warmerdam
quelle
Dies ist wahrscheinlich die bisher beste Antwort, aber für mich bedeutet dies, dass die DXF-Exportfunktion von OGR keine DXFS exportiert. Ich hoffe auf eine Antwort, die mir tatsächlich verwendbare dxfs mit Attributdaten und nicht einer großen Liste von Fehlern bringt. Ich werde sehen, ob ich helfen kann, den OGR-Export zu verbessern.
BenjaminGolder
2

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:

ogr2ogr -f DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$'" -sql "select $COLUMN$ as Layer, the_geom from $TABLE$"

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

ogr2ogr -select '' -f DXF DXF $TITLE$.dxf PG:"dbname='$DBNAME$' host='$HOST$' port='$PORT$' user='$USER$' password='$PASSWORD$' schemas=$SCHEMA$ tables=$TABLE$(the_geom)"

Zu beiden Anweisungen können Sie die folgende Option hinzufügen:

-spat xmin ymin xmax ymax

wenn Sie eine räumliche Einschränkung wünschen.

mk.archaeo
quelle
1

Was Frank sagte, würde mein Vorschlag sein.
Erstellen Sie eine DXF mit Ihren Ebenennamen und verwenden Sie diese als Vorlage.

Brad Nesom
quelle