PostgreSQL'den dxf dosyaları alma


10

Bir grup şekil dosyasını başarıyla PostGIS veritabanına yükledim. SQL sorgularına dayalı dxf dosyaları olarak belirli geometri ve katmanları almak istiyorum.

Windows'ta OSGeo4W paketinden PostGIS, GDAL, PostgreSQL ve Python kullanıyorum.

Ben ogr2ogr böyle biraz kullanmanız gerektiğini hayal ediyorum:

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

Ancak bunu uygun değerlerle yaptığımda, bunun gibi bir dizi hata alıyorum:

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

Katmandaki her öznitelik sütunu için bir hatayla sonuçlandı some_tableAma bir dxf dosyası alıyorum.

Zaten bir .dxf dosyası oluşturduysam ve yukarıdaki komutu ( -overwriteseçenek dahil ) yeniden çalıştırdım, bunun yerine bu hatayı alıyorum:

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

GDAL_DATAÇevresel değişkenin doğru ayarlandığından emin olmak için kontrol ettim . (- C:\OSGeo4W\share\gdal)

Tüm bu araçlara yeniyim çünkü bu göreve yanlış yaklaşıyorum kesinlikle, bu nedenle SQL sorgularına dayalı PostgreSQL'de depolanan GIS verilerinden .dxf dosyalarını nasıl yapacağınız konusunda herhangi bir öneri ve ipucuna açığım.


Yanıtlar:


9

Bünyamin,

DXF (OGR tarafından ileri sürüldüğü gibi) keyfi CBS özelliklerini desteklemez. Şuna benzeyen sabit bir şema var:

Katman: Dize (0.0)
Alt Sınıflar: String (0.0)
ExtendedEntity: Dize (0.0)
Çizgi tipi: Dize (0.0)
EntityHandle: Dize (0.0)

ve bunlardan sadece birkaçı yazma üzerine incelenir. En basit yöntem, -skipfailures yöntemini kullanmaktır, ancak bu hatalara rağmen çeviri devam ediyor gibi görünüyor.

-Overwrite için - DXF'nin desteklemediği katman silme işlemini destekleyen biçimler için geçerlidir. Ogr2ogr dosyasını çalıştırmadan önce mevcut DXF dosyasını önceden silin.


Bu muhtemelen şimdiye kadarki en iyi cevap, ama bana göre OGR'nin dxf dışa aktarma özelliğinin dxfs dışa aktarmadığını söylemek benzer. Aslında beni öznitelik verileri ile kullanılabilir dxfs alır hataların büyük bir liste değil bir cevap umuyorum. OGR ihracatının iyileştirilmesine yardımcı olup olamayacağımı göreceğim.
BenjaminGolder

2

Frank'in cevabı ve Uster kasabasının "GIS-Kompetenzzentrum" un ipucu ile (sadece Almanca)

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

PostGIS to dxf bu şekilde yapılabilir anladım:

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

Sonunda sql-deyimi $ COLUMN $ a Layer içindeki her satır için yaratılmıştır. Bu yüzden $ COLUMN $ benzeri bir kimlik veya ilgili bir ad seçmek en iyisi olacaktır.

Bir 2D Çokgen-Tablo ile denedim. Dxf dosyasında kapalı çoklu çizgiler yok. Belki sql dizesine "$ polygon $ Linetype olarak" gibi bir şey eklemek mümkündür.

Tablonuzdaki tüm geometrileri tek bir katmanda istiyorsanız, Uster'in "GIS-Kompetenzzentrum" kodunu kullanabilirsiniz.

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

Her iki ifadeye de aşağıdaki seçeneği ekleyebilirsiniz:

-spat xmin ymin xmax ymax

mekansal bir kısıtlama istiyorsanız.


1

Frank'in söyledikleri benim önerim olacaktı.
Katman adlarınızı zaten içinde olan bir dxf oluşturun ve bunu şablon olarak kullanın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.