obtener archivos dxf de PostgreSQL

10

He cargado con éxito un montón de shapefiles en una base de datos PostGIS. Me gustaría poder recuperar geometría y capas específicas como archivos dxf basados ​​en consultas SQL.

Estoy usando PostGIS, GDAL, PostgreSQL y Python del paquete OSGeo4W en Windows.

Me imagino que debería usar ogr2ogr un poco como esto:

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

pero cuando hago eso con los valores apropiados, obtengo una serie de errores como este:

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

Resultando en un error para cada columna de atributo en la capa some_tablePero obtengo un archivo dxf.

Si ya he creado un archivo .dxf y vuelvo a ejecutar el comando anterior (incluida la -overwriteopción), aparece este error:

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

Ya lo he verificado para asegurarme de que la GDAL_DATAvariable ambiental esté configurada correctamente. (a C:\OSGeo4W\share\gdal)

Ciertamente es posible que esté abordando esta tarea incorrectamente porque soy nuevo en todas estas herramientas, por lo que estoy abierto a cualquier sugerencia y consejo sobre cómo hacer archivos .dxf a partir de datos SIG almacenados en PostgreSQL basados ​​en consultas SQL.

BenjaminGolder
fuente
encontró un enlace relevante: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

Respuestas:

9

Benjamín,

DXF (como lo supone OGR) no admite atributos GIS arbitrarios. Tiene un esquema fijo que se ve así:

Capa: Cadena (0.0)
Subclases: Cadena (0.0)
ExtendedEntity: String (0.0)
Tipo de línea: cadena (0.0)
EntityHandle: String (0.0)

y solo unos pocos de estos se examinan realmente en escritura. El recurso más simple es usar el método -skipfailures, aunque parece que la traducción continúa a pesar de los errores, incluso sin eso.

En cuanto a -overwrite, eso es aplicable para formatos que admiten la eliminación de capas que DXF no admite. Simplemente elimine previamente el archivo DXF existente antes de ejecutar ogr2ogr.

Frank Warmerdam
fuente
Esta es probablemente la mejor respuesta hasta ahora, pero para mí es similar a decir que la función de exportación dxf de OGR no exporta dxfs. Espero una respuesta que realmente me permita usar dxfs con datos de atributos y no una gran lista de errores. Veré si puedo ayudar a mejorar la exportación de OGR.
BenjaminGolder
2

con la respuesta de Frank y la pista del "GIS-Kompetenzzentrum" de la ciudad de Uster (solo en alemán)

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

He descubierto que PostGIS a dxf se puede hacer así:

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

La instrucción sql, al final, creada para cada fila en $ COLUMN $ an Layer. Por lo tanto, será mejor seleccionar una ID similar a $ COLUMN $ o un nombre relevante.

Lo he intentado con una tabla de polígonos 2D. El archivo dxf no ha cerrado polilíneas. Quizás sea posible agregar algo como "$ polygon $ como Linetype" a la cadena sql.

Si desea todas las geometrías de su tabla en una capa, puede usar el código del "GIS-Kompetenzzentrum" de 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)"

En ambas declaraciones puede agregar la siguiente opción:

-spat xmin ymin xmax ymax

si quieres una restricción espacial.

mk.archaeo
fuente
1

Lo que dijo Frank sería mi sugerencia.
Cree un dxf con sus nombres de capa ya en él y úselo como plantilla.

Brad Nesom
fuente