Obtendo arquivos dxf do PostgreSQL

10

Carreguei com sucesso um monte de shapefiles em um banco de dados PostGIS. Eu gostaria de poder recuperar geometria e camadas específicas como arquivos dxf com base em consultas SQL.

Estou usando PostGIS, GDAL, PostgreSQL e Python da suíte OSGeo4W no Windows.

Estou imaginando que eu deveria estar usando ogr2ogr um pouco assim:

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

mas quando faço isso com os valores apropriados, recebo uma série de erros como este:

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

Resultando em um erro para cada coluna de atributo na camada some_tableMas recebo um arquivo dxf.

Se já criei um arquivo .dxf e execute novamente o comando acima (incluindo a -overwriteopção), recebo este erro:

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

Eu já verifiquei para garantir que a GDAL_DATAvariável ambiental esteja definida corretamente. (para C:\OSGeo4W\share\gdal)

Certamente é possível que eu esteja abordando essa tarefa incorretamente porque sou novo em todas essas ferramentas, por isso estou aberto a sugestões e dicas sobre como criar arquivos .dxf a partir de dados GIS armazenados no PostgreSQL com base em consultas SQL.

BenjaminGolder
fonte
encontrou um link relevante: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

Respostas:

9

Benjamin,

O DXF (como suposto pelo OGR) não suporta atributos GIS arbitrários. Ele tem um esquema fixo que se parece com:

Camada: String (0,0)
Subclasses: String (0,0)
ExtendedEntity: String (0.0)
Tipo de linha: sequência (0,0)
EntityHandle: String (0.0)

e apenas alguns deles são realmente examinados na gravação. O expediente mais simples é apenas usar o método -skipfailures, embora pareça que a tradução esteja prosseguindo, apesar dos erros, mesmo sem isso.

Quanto a - overwrite - é aplicável a formatos que suportam exclusão de camada que o DXF não suporta. Apenas pré-exclua o arquivo DXF existente antes de executar ogr2ogr.

Frank Warmerdam
fonte
Esta é provavelmente a melhor resposta até agora, mas para mim é semelhante a dizer que o recurso de exportação dxf do OGR não exporta dxfs. Espero uma resposta que realmente me dê dxfs utilizáveis ​​com dados de atributo e não uma grande lista de erros. Vou ver se posso ajudar a melhorar a exportação do OGR.
31811 BenjaminGolder
2

com a resposta de Frank e a dica do "GIS-Kompetenzzentrum" da cidade de Uster (somente em alemão)

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

Eu descobri que o PostGIS to dxf pode ser feito da seguinte maneira:

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

A instrução sql, no final, criada para cada linha em $ COLUMN $ an Layer. Portanto, será melhor selecionar um ID semelhante a $ COLUMN $ ou um nome relevante.

Eu tentei com uma tabela de polígonos 2D. O arquivo dxf não fechou polilinhas. Talvez seja possível adicionar algo como "$ polygon $ as Linetype" à string sql.

Se você quiser todas as geometrias da sua tabela em uma camada, poderá usar o código do "GIS-Kompetenzzentrum" do 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)"

Nas duas instruções, você pode adicionar a seguinte opção:

-spat xmin ymin xmax ymax

se você deseja uma restrição espacial.

mk.archaeo
fonte
1

O que Frank disse seria minha sugestão.
Crie um dxf com os nomes das camadas já existentes e use-o como modelo.

Brad Nesom
fonte