lấy các tập tin dxf ra khỏi PostgreSQL


10

Tôi đã tải thành công một loạt các shapefiles vào cơ sở dữ liệu PostGIS. Tôi muốn có thể truy xuất các lớp và hình học cụ thể dưới dạng tệp dxf dựa trên các truy vấn SQL.

Tôi đang sử dụng PostGIS, GDAL, PostgreSQL và Python từ bộ OSGeo4W trên Windows.

Tôi đang tưởng tượng rằng tôi nên sử dụng ogr2ogr một chút như thế này:

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

nhưng khi tôi làm điều đó với các giá trị phù hợp, tôi gặp một loạt lỗi như thế này:

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

Kết quả là một lỗi cho mỗi cột thuộc tính trong lớp some_tableNhưng tôi nhận được một tệp dxf.

Nếu tôi đã tạo tệp .dxf và tôi chạy lại lệnh ở trên (bao gồm -overwritetùy chọn), tôi sẽ gặp lỗi này:

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

Tôi đã kiểm tra để đảm bảo rằng GDAL_DATAbiến môi trường được đặt chính xác. (đến C:\OSGeo4W\share\gdal)

Chắc chắn rằng tôi đang tiếp cận nhiệm vụ này không chính xác vì tôi chưa quen với tất cả các công cụ này, vì vậy tôi mở cho bất kỳ đề xuất và mẹo nào về cách tạo tệp .dxf từ dữ liệu GIS được lưu trữ trong PostgreQuery dựa trên các truy vấn SQL.


tìm thấy một liên kết có liên quan: fwarmerdam.blogspot.com/2010/07/ogr-dxf-upTHER.html
BenjaminGolder

Câu trả lời:


9

Benjamin

DXF (theo giả định của OGR) không hỗ trợ các thuộc tính GIS tùy ý. Nó có một lược đồ cố định trông giống như:

Lớp: Chuỗi (0,0)
SubClass: String (0.0)
ExtendedEntity: Chuỗi (0,0)
Linetype: Chuỗi (0,0)
EntityHandle: Chuỗi (0,0)

và chỉ một vài trong số này thực sự được kiểm tra trên văn bản. Phương pháp đơn giản nhất là chỉ sử dụng phương thức -skipfailures mặc dù có vẻ như bản dịch đang được tiến hành mặc dù có lỗi ngay cả khi không có điều đó.

Như đối với -overwrite - có thể áp dụng cho các định dạng hỗ trợ xóa lớp mà DXF không có. Chỉ cần xóa trước tệp DXF hiện có trước khi chạy ogr2ogr.


Đây có lẽ là câu trả lời tốt nhất cho đến nay, nhưng với tôi, nó giống như nói rằng tính năng xuất dxf của OGR không xuất dxfs. Tôi hy vọng câu trả lời thực sự mang lại cho tôi các dxfs có thể sử dụng được với dữ liệu thuộc tính và không phải là một danh sách lỗi lớn. Tôi sẽ xem liệu tôi có thể giúp cải thiện việc xuất OGR không.
BenjaminGolder

2

với câu trả lời từ Frank và gợi ý từ "GIS-Kompetenzzentrum" của thị trấn Uster (chỉ bằng tiếng Đức)

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

Tôi đã tìm ra rằng PostGIS cho dxf có thể được thực hiện như vậy:

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

Câu lệnh sql, ở cuối, được tạo cho mỗi hàng trong $ COLUMN $ một Layer. Vì vậy, tốt nhất là chọn ID giống như $ COLUMN $ hoặc tên có liên quan.

Tôi đã thử nó với Bảng đa giác 2D. Tệp dxf chưa đóng polylines. Có lẽ có thể thêm một cái gì đó như "$ polygon $ as Linetype" vào chuỗi sql.

Nếu bạn muốn tất cả hình học từ bảng của mình trên một lớp thì bạn có thể sử dụng mã từ "GIS-Kompetenzzentrum" của 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)"

Trên cả hai câu lệnh, bạn có thể thêm tùy chọn sau:

-spat xmin ymin xmax ymax

nếu bạn muốn hạn chế về không gian


1

Những gì Frank nói sẽ là gợi ý của tôi.
Tạo một dxf với tên lớp của bạn đã có trong đó và sử dụng nó làm mẫu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.