ottenere file dxf da PostgreSQL


10

Ho caricato con successo un sacco di shapefile in un database PostGIS. Vorrei essere in grado di recuperare la geometria e i livelli specifici come file dxf basati su query SQL.

Sto usando PostGIS, GDAL, PostgreSQL e Python dalla suite OSGeo4W su Windows.

Immagino che dovrei usare ogr2ogr un po 'come questo:

$ ogr2ogr -sql "SELECT * FROM some_table" -f "dxf" outputfile.dxf -overwrite "PG:dbname=mydb user=dbusername password=dbpassword"

ma quando lo faccio con i valori appropriati, ottengo una serie di errori come questo:

ERROR 1: DXF layer does not support arbitrary field creation, field 'objectid' not created. 

Il risultato è un errore per ogni colonna di attributo nel livello some_tableMa ottengo un file dxf.

Se ho già creato un file .dxf e rieseguo il comando sopra (inclusa l' -overwriteopzione), ottengo invece questo errore:

Layer sql_statement not found, and CreateLayer not supported by driver. ERROR 1: Terminating translation prematurely after failed translation from sql statement.

Ho già verificato per accertarmi che la GDAL_DATAvariabile ambientale sia impostata correttamente. (a C:\OSGeo4W\share\gdal)

È certamente possibile che stia affrontando questa attività in modo errato perché sono nuovo a tutti questi strumenti, quindi sono aperto a tutti i suggerimenti e suggerimenti su come creare file .dxf dai dati GIS memorizzati in PostgreSQL sulla base di query SQL.


Risposte:


9

Beniamino,

DXF (come supposto da OGR) non supporta attributi GIS arbitrari. Ha uno schema fisso che assomiglia a:

Strato: stringa (0,0)
Sottoclasse: String (0.0)
ExtendedEntity: String (0.0)
Tipo di linea: String (0,0)
EntityHandle: String (0.0)

e solo alcuni di questi sono effettivamente esaminati per iscritto. L'espediente più semplice è solo usare il metodo -skipfailures sebbene sembri che la traduzione stia procedendo nonostante gli errori anche senza.

Per quanto riguarda -overwrite, questo è applicabile per i formati che supportano l'eliminazione dei livelli che DXF non ha. Basta pre-eliminare il file DXF esistente prima di eseguire ogr2ogr.


Questa è probabilmente la risposta migliore finora, ma per me è simile a dire che la funzione di esportazione dxf di OGR non esporta dxfs. Spero in una risposta che mi renda effettivamente utilizzabile dxfs con i dati degli attributi e non un grande elenco di errori. Vedrò se posso aiutare a migliorare l'esportazione OGR.
BenjaminGolder

2

con la risposta di Frank e il suggerimento del "GIS-Kompetenzzentrum" della città di Uster (solo in tedesco)

http://gis.uster.ch/dokumentation/datenkonvertierung/ogr

Ho capito che PostGIS su dxf può essere fatto in questo modo:

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$"

L'istruzione sql, alla fine, ha creato per ogni riga in $ COLUMN $ un livello. Quindi sarà meglio selezionare un $ COLUMN $ come ID o un nome rilevante.

L'ho provato con una tabella poligonale 2D. Il file dxf non ha chiuso le polilinee. Forse è possibile aggiungere qualcosa come "$ polygon $ as Linetype" alla stringa sql.

Se vuoi tutte le geometrie dalla tua tabella su un livello, puoi usare il codice del "GIS-Kompetenzzentrum" di Uster

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

Ad entrambe le istruzioni è possibile aggiungere la seguente opzione:

-spat xmin ymin xmax ymax

se vuoi una restrizione spaziale.


1

Quello che Frank ha detto sarebbe stato il mio suggerimento.
Crea un dxf con i nomi dei livelli già presenti e usalo come modello.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.