PostgreSQLからdxfファイルを取得する


10

多数のシェープファイルをPostGISデータベースに正常にロードしました。SQLクエリに基づいて、特定のジオメトリとレイヤーをdxfファイルとして取得できるようにしたいと思います。

WindowsのOSGeo4WスイートのPostGIS、GDAL、PostgreSQL、Pythonを使用しています。

私は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

これらのツールはすべて初めてなので、このタスクに間違って取り組んでいる可能性は確かにあります。そのため、SQLクエリに基づいてPostgreSQLに格納されたGISデータから.dxfファイルを作成する方法についての提案やヒントを受け入れることができます。


回答:


9

ベンジャミン、

DXF(OGRで想定)は、任意のGIS属性をサポートしていません。次のような固定スキーマがあります。

レイヤー:文字列(0.0)
サブクラス:文字列(0.0)
ExtendedEntity:文字列(0.0)
線種:文字列(0.0)
EntityHandle:文字列(0.0)

実際に書き込み時に検査されるのはこれらのほんの一部です。最も簡単な方法は、-skipfailuresメソッドを使用することです。ただし、それがなくてもエラーが発生しても翻訳は進んでいるようです。

-overwriteについて-DXFがサポートしないレイヤー削除をサポートするフォーマットに適用されます。ogr2ogrを実行する前に、既存のDXFファイルを事前に削除してください。


これはおそらくこれまでのところ最良の答えですが、私にとって、OGRのdxfエクスポート機能はdxfsをエクスポートしないと言っているのと同じです。エラーの大きなリストではなく、属性データを使用して実際に使用可能なdxfsを取得する答えを期待しています。OGRエクスポートの改善を支援できるかどうかを確認します。
BenjaminGolder

2

フランクからの回答とウスターの町の「GIS-Kompetenzzentrum」からのヒント(ドイツ語のみ)

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ステートメントは、$ COLUMN $レイヤーのすべての行に対して作成されます。したがって、$ COLUMN $のようなIDまたは関連する名前を選択するのが最善です。

2Dポリゴンテーブルで試しました。dxfファイルに閉じたポリラインがありません。おそらく、「$ polygon $ as Linetype」のようなものをsql-stringに追加することが可能です。

1つのレイヤーにあるテーブルのすべてのジオメトリが必要な場合は、Usterの「GIS-Kompetenzzentrum」のコードを使用できます

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.