ベクタ(shpやgeojson)からdxfファイルの作り方

1,363 views
Skip to first unread message

sakuya

unread,
Mar 3, 2019, 8:50:35 PM3/3/19
to QGIS初心者質問グループ
こちらsakuyaです。お世話になります。
ベクタデータ(shpやgeojson)からdxfファイルの作り方について再度質問です。
前回
でありた さまよりいろいろと方法を教えて頂きました。
その時にはファイルごとにレイヤを分けたかったため、sql構文を教えて頂きました。
今回は、属性データの値ごとにレイヤを分けたいという質問です。
添付した「サンプル.geojson]」
の[id]フィールドの数字ごとにレイヤに分けてほしいといった意味合いです。

構文としては
ogr2ogr -f DXF サンプル.dxf サンプル.geojson
という構文で、[サンプル.geojson]ファイルに`layer`という属性フィールドがあればこの部分をdxfのレイヤーとして分けてくれるのはわかりました。
一方で任意の属性フィールドをdxfのレイヤーに設定したい場合はどのように記載すればいいのでしょうか?
ogr2ogr -f DXF -select "id" サンプル.dxf サンプル.geojson
でいけると思ったのですが、これではレイヤーゼロにすべてが記載されてしまいました。

あるいは、既存のshpやgeojsonに対して`layer`という属性フィールドを作り、任意の属性フィールドをコピーして上書きするという事も出来るのでしょうか?

QGISというより、ogr2ogrの質問となり申し訳ありませんが、よろしくお願いします。
サンプル.geojson

adachi

unread,
Mar 3, 2019, 9:13:12 PM3/3/19
to QGIS初心者質問グループ
sakuya様

コマンドはほとんど使ったことがないので受け売り情報ではありますが
以下に似たような質問がありました。


回答として(ここではshp → dxfの例ですが)、

ogr2ogr -f DXF 出力ファイル名.dxf 入力ファイル名.shp -sql "SELECT XXXX AS Layer FROM 入力ファイル名"

が基本構文となり、XXXXに「layer」としてセットしたい属性フィールド名を入れるようです。


ただしこの質問のリンク先にあるページでは、たとえば等高線を高さごとにレイヤ分けして出力したい場合、そのままではz値がついてこないので

ogr2ogr -f DXF 出力ファイル名.dxf 入力ファイル名.shp -zfield XXXX -sql "SELECT XXXX AS Layer,* FROM 入力ファイル名"

と変える必要がある、と書いてあります。

sakuya

unread,
Mar 4, 2019, 5:11:42 AM3/4/19
to QGIS初心者質問グループ
adachさま
参考ページありがとうございます。

C:\Users\user\Desktop\new>ogr2ogr -f DXF export.dxf sample.geojson -sql "SELECT id AS Layer FROM sample"
と入力すると
ERROR 1: SELECT from table sample failed, no such table/featureclass.
とidというテーブルがsampleテーブルには存在しないと返ってきました。
間違いなく存在しているのですが、なぜなのでしょうか?

sakuya

unread,
Mar 4, 2019, 7:06:24 AM3/4/19
to QGIS初心者質問グループ
こちらsakuyaです。お世話になります。
izayoiから連絡をもらい、
ogrinfo sample.geojson
と入力してみました。そうしたら
C:\Users\user\Desktop\new>ogrinfo sample.geojson
INFO: Open of `sample.geojson'
      using driver `GeoJSON' successful.
1: 繧オ繝ウ繝励Ν (Line String)
とレイヤ名が文字化けしていました。

当該Geojsonを開いてみたところ、レイヤ名が「サンプル」と日本語名になっていたのでこれをsampeと修正し
C:\Users\user\Desktop\new>ogr2ogr -f DXF sample.dxf sample.geojson -sql "SELECT id AS Layer FROM sample"
と流したところ望んだとおりの結果が得られました。
日本語のファイルネームにしてしまっていると結構危険だという事がわかりました。お騒がせしました。


sakuya

unread,
Mar 4, 2019, 7:13:42 AM3/4/19
to QGIS初心者質問グループ
そうなると、この方法ってレイヤネームが日本語になっていると全く使い物にならないってことでしょうか?
ファイルネーム=レイヤネームとすることってogr2ogrで実施することができるのでしょうか?

adachi

unread,
Mar 4, 2019, 9:03:42 PM3/4/19
to QGIS初心者質問グループ
sakuya様

またまた素人の聞きかじり情報で申し訳ないのですが


上記を見ると、Geojsonファイルのラテン語の属性フィールド名を読み込もうとして失敗した質問に対する答えとして
「Geojsonはjsonの拡張形式なので、エンコード仕様もこれに従う。jsonの仕様として、デフォルトのエンコードはUTF-8であり、それ以外の形式だと操作がうまくいかないことが多い」
とあります。

※このあたりあまり明るくないので、詳しい方や「それは違うよ」等、認識に誤りありましたらご指摘ください


なお今回はogr2ogrコマンドを使用したいという事情があるものと思いますが、別の方法として
QGISの「インポート/エクスポート」→「プロジェクトをDXFでエクスポート」の設定画面で
「出力レイヤ属性」を「id」などに変えてやれば、出力されたDXFはidごとに画層分けされるようになるみたいです。
すでにご存知かもしれませんが、ご参考まで。

sakuya

unread,
Mar 4, 2019, 11:04:18 PM3/4/19
to QGIS初心者質問グループ
adachiさま
sakuyaです。お世話になります。
通常ならおっしゃる通りの方法でQGIS上からdxfファイルを作るのですが、今回はちょっと数が多く、なんとかogr2ogrで変換ができないかなというのが始まりでした。
昨日ですが、izayoiからテキストエディタでgrep置換機能でレイヤネームの部分をを全部dummyにしてやれというアドバイスをもらい、何とか全部変換できました。
adachiさま、今回もいろいろとありがとうございました。
Reply all
Reply to author
Forward
0 new messages