รับไฟล์ dxf จาก PostgreSQL


10

ฉันโหลดรูปร่างไฟล์ไปยังฐานข้อมูล PostGIS ได้สำเร็จ ฉันต้องการที่จะดึงรูปทรงเรขาคณิตและเลเยอร์ที่เฉพาะเจาะจงเป็นไฟล์ dxf ตามแบบสอบถาม SQL

ฉันใช้ PostGIS, GDAL, PostgreSQL และ Python จากชุด OSGeo4W บน Windows

ฉันคิดว่าฉันควรใช้ ogr2ogr เล็กน้อยเช่นนี้:

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

แต่เมื่อฉันทำเช่นนั้นด้วยค่าที่เหมาะสมฉันได้รับข้อผิดพลาดแบบนี้:

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

ส่งผลให้เกิดข้อผิดพลาดสำหรับทุกคอลัมน์คุณลักษณะในชั้นsome_tableแต่ฉันจะได้รับไฟล์ dxf

หากฉันได้สร้างไฟล์. dxf แล้วและฉันรันคำสั่งด้านบนอีกครั้ง (รวมถึง-overwriteตัวเลือก) ฉันได้รับข้อผิดพลาดนี้แทน:

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

ฉันได้ตรวจสอบแล้วเพื่อให้แน่ใจว่าGDAL_DATAตัวแปรสภาพแวดล้อมได้รับการตั้งค่าอย่างถูกต้อง (ถึงC:\OSGeo4W\share\gdal)

เป็นไปได้อย่างแน่นอนว่าฉันกำลังเข้าใกล้งานนี้อย่างไม่ถูกต้องเพราะฉันใหม่กับเครื่องมือเหล่านี้ดังนั้นฉันจึงเปิดรับข้อเสนอแนะและเคล็ดลับเกี่ยวกับวิธีการสร้างไฟล์. dxf จากข้อมูล GIS ที่จัดเก็บใน PostgreSQL ตามแบบสอบถาม SQL


พบลิงค์ที่เกี่ยวข้อง: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upgrade.html
BenjaminGolder

คำตอบ:


9

เบนจามิน

DXF (ตามที่ควรโดย OGR) ไม่สนับสนุนคุณลักษณะ GIS ตามอำเภอใจ มีสคีมาคงที่ซึ่งมีลักษณะดังนี้:

ชั้น: สตริง (0.0)
คลาสย่อย: สตริง (0.0)
ExtendedEntity: สตริง (0.0)
Linetype: สตริง (0.0)
EntityHandle: สตริง (0.0)

และมีเพียงไม่กี่ข้อเท่านั้นที่ถูกตรวจสอบเมื่อเขียน วิธีที่ง่ายที่สุดคือใช้วิธี -skipfailures แต่ดูเหมือนว่าการแปลจะดำเนินต่อไปแม้จะมีข้อผิดพลาดก็ตาม

สำหรับ --overwrite - สามารถใช้ได้กับรูปแบบที่สนับสนุนการลบเลเยอร์ที่ DXF ไม่ เพียงลบไฟล์ DXF ที่มีอยู่ก่อนที่จะรัน ogr2ogr


นี่อาจเป็นคำตอบที่ดีที่สุด แต่สำหรับฉันแล้วมันก็เหมือนกับการบอกว่าคุณลักษณะการส่งออก dxf ของ OGR ไม่ได้ส่งออก dxfs ฉันหวังว่าจะได้รับคำตอบที่ทำให้ฉันใช้งาน dxfs ได้พร้อมกับข้อมูลคุณลักษณะและไม่ใช่รายการข้อผิดพลาดจำนวนมาก ฉันจะดูว่าฉันสามารถช่วยปรับปรุงการส่งออก OGR ได้ไหม
BenjaminGolder

2

ด้วยคำตอบจากแฟรงค์และคำใบ้จาก "GIS-Kompetenzzentrum" ของเมือง Uster (เป็นภาษาเยอรมันเท่านั้น)

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

ฉันพบว่า PostGIS ถึง dxf สามารถทำได้ดังนี้:

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

คำสั่ง sql-end สร้างขึ้นสำหรับทุกแถวใน $ COLUMN $ an Layer ดังนั้นจะเป็นการดีที่สุดที่จะเลือก $ COLUMN $ เช่น ID หรือชื่อที่เกี่ยวข้อง

ฉันได้ลองกับ 2D Polygon-Table แล้ว ไฟล์ dxf ไม่ได้ปิด polylines อาจเป็นไปได้ที่จะเพิ่มบางสิ่งเช่น "$ polygon $ as Linetype" ใน sql-string

หากคุณต้องการรูปทรงเรขาคณิตทั้งหมดจากตารางในเลเยอร์เดียวคุณสามารถใช้รหัสจาก "GIS-Kompetenzzentrum" ของ 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)"

ในทั้งสองคำสั่งคุณสามารถเพิ่มตัวเลือกต่อไปนี้:

-spat xmin ymin xmax ymax

ถ้าคุณต้องการข้อ จำกัด เชิงพื้นที่


1

สิ่งที่แฟรงก์พูดจะเป็นคำแนะนำของฉัน
สร้าง dxf ด้วยชื่อเลเยอร์ของคุณอยู่แล้วและใช้เป็นเทมเพลต

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.