mendapatkan file dxf dari PostgreSQL


10

Saya telah berhasil memuat sekelompok shapefile ke dalam database PostGIS. Saya ingin dapat mengambil geometri dan lapisan tertentu sebagai file DXF berdasarkan query SQL.

Saya menggunakan PostGIS, GDAL, PostgreSQL, dan Python dari suite OSGeo4W di Windows.

Saya membayangkan bahwa saya harus menggunakan ogr2ogr sedikit seperti ini:

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

tetapi ketika saya melakukannya dengan nilai-nilai yang sesuai, saya mendapatkan serangkaian kesalahan seperti ini:

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

Menghasilkan kesalahan untuk setiap kolom atribut di layer some_tableTapi saya mendapatkan file dxf.

Jika saya sudah membuat file .dxf, dan saya menjalankan kembali perintah di atas (termasuk -overwriteopsi), saya mendapatkan kesalahan ini sebagai gantinya:

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

Saya sudah memeriksa untuk memastikan bahwa GDAL_DATAvariabel lingkungan diatur dengan benar. (untuk C:\OSGeo4W\share\gdal)

Tentunya mungkin bahwa saya mendekati tugas ini secara tidak benar karena saya baru mengenal semua alat ini, jadi saya terbuka untuk segala saran dan kiat tentang cara membuat file .dxf dari data GIS yang disimpan dalam PostgreSQL berdasarkan pada query SQL.


Jawaban:


9

Benjamin,

DXF (seperti yang seharusnya oleh OGR) tidak mendukung atribut GIS yang berubah-ubah. Ini memiliki skema tetap yang terlihat seperti:

Lapisan: Tali (0,0)
SubKacamata: Tali (0.0)
ExtendedEntity: String (0,0)
Linetype: String (0,0)
EntityHandle: String (0,0)

dan hanya beberapa di antaranya yang benar-benar diperiksa secara tertulis. Cara paling sederhana adalah dengan menggunakan metode -skipfailures meskipun terjemahan sepertinya sedang berjalan meskipun ada kesalahan bahkan tanpa itu.

Seperti untuk -overwrite - itu berlaku untuk format yang mendukung penghapusan lapisan yang tidak DXF. Pra-hapus file DXF yang ada sebelum menjalankan ogr2ogr.


Ini mungkin jawaban terbaik sejauh ini, tetapi bagi saya itu sama dengan mengatakan bahwa fitur ekspor dxf dari OGR tidak mengekspor dxfs. Saya berharap jawaban yang benar-benar membuat saya dapat menggunakan DXF dengan data atribut dan bukan daftar kesalahan besar. Saya akan melihat apakah saya dapat membantu meningkatkan ekspor OGR.
BenjaminGolder

2

dengan jawaban dari Frank dan petunjuk dari "GIS-Kompetenzzentrum" dari kota Uster (hanya dalam bahasa Jerman)

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

Saya telah mengetahui bahwa PostGIS ke dxf dapat dilakukan seperti ini:

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

Pernyataan sql, pada akhirnya, dibuat untuk setiap baris dalam $ COLUMN $ an Layer. Jadi yang terbaik adalah memilih ID seperti $ COLUMN $ atau nama yang relevan.

Saya sudah mencobanya dengan 2D Polygon-Table. File dxf belum menutup polyline. Mungkin dimungkinkan untuk menambahkan sesuatu seperti "$ polygon $ as Linetype" ke sql-string.

Jika Anda ingin semua geometri dari tabel Anda pada satu layer maka Anda dapat menggunakan kode dari "GIS-Kompetenzzentrum" dari 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)"

Di kedua pernyataan, Anda dapat menambahkan opsi berikut:

-spat xmin ymin xmax ymax

jika Anda menginginkan batasan spasial.


1

Apa yang dikatakan Frank akan menjadi saran saya.
Buat dxf dengan nama layer Anda yang sudah ada di dalamnya dan gunakan itu sebagai templat.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.