QGISにJSONファイルを読み込みたいです。

3,077 views
Skip to first unread message

Kosuke Shinoda

unread,
Apr 22, 2020, 8:43:20 AM4/22/20
to QGIS初心者質問グループ
いつもお世話になっております。

QGIS3.10にGeoJSONファイルではなく、JSONファイルを読み込ませたいのですが、方法が分からないです。方法が分かる方がいらっしゃればご教授願いたいです。

目的は3DモデルのJSONファイルの座標値を知るためです。

よろしくお願いします。

福岡

unread,
Apr 22, 2020, 7:34:47 PM4/22/20
to QGIS初心者質問グループ
Kosuke Shinoda 様

おはようございます。

既に試しているかもしれませんが、ファイルをテキストエディタで読んでみてはいかがでしょうか?
JSONは、テキストエディタで内容を確認できます。

ここからは想像ですが、空間データはかたまって記述されているのではないかと思います。
うまく編集できれば、GeoJSONや空間データ付きのCSVとしてQGISに読み込ませることも可能かと思います。

キタ

unread,
Apr 23, 2020, 11:49:05 PM4/23/20
to QGIS初心者質問グループ
3DモデルのJsonの構造がどうなっているかわかりませんが、単純な二次配列であれば、CSVに変換してはどうでしょうか?
Webで検索すれば、いろいろでてきます。
https://qiita.com/seisantaro/items/c726e0083932ac0dd7bb
https://qiita.com/maeda_t/items/235d5f8f0acebdd7c939

参考までに
キタ

Kosuke Shinoda

unread,
Apr 24, 2020, 7:58:44 AM4/24/20
to QGIS初心者質問グループ
キタ 様
 
ありがとうございます。試してみます。
 
3DモデルのJson構造は以下のURLから見られます。ご覧ください。
 
https://shinodakosuke.github.io/iiif-3d/docs/OBJtoJSON_koshinto_meguro_1_raw/OBJtoJSON_koshinto_meguro_1_raw.json

Kosuke Shinoda

unread,
Apr 24, 2020, 7:59:45 AM4/24/20
to QGIS初心者質問グループ
福岡 様

ありがとうございます。

テキストエディタで内容を確認できました。

編集してみます。

ありた

unread,
Apr 25, 2020, 12:13:04 AM4/25/20
to QGIS初心者質問グループ
こんにちは

three.js で使われている BufferGeometry という形式なのですね。

調べてみると position 内の array が頂点座標で、三角メッシュで立体表面を表現する
形式のようでしたので、これを GeoCSV にし、そのままではちょっと扱いにくいので
それを GeoPackage にしてみました。

GeoCSV (ただしデリミタはセミコロン)にするスクリプトは Ruby で組みました。

require 'json'

data = JSON.parse(IO.read('OBJtoJSON_koshinto_meguro_1_raw.json'))

open('dump.csv', 'w') do |io|
    # ポリゴン座標と各頂点の高さを書き出す
    io.puts 'geometry;z1;z2;z3'
    
    # position に頂点座標が書き込まれている
    pos = data['geometries'][0]['data']['attributes']['position']
    # x, y, z の3要素 * 3頂点なので、値を9個ずつ取得する
    (pos['array'].size / 9).times do |i|
        v = pos['array'][i * 9, 9]
        # ポリゴン座標の最終点は始点と同一にする必要がある
        v = v + v[0, 3]
        wkt = 'POLYGONZ((%.7f %.7f %.7f, %.7f %.7f %.7f, %.7f %.7f %.7f, %.7f %.7f %.7f))' % v
        io.puts [wkt, v[2], v[5], v[8]].join(';')
    end
end

ただ、 QGIS は 3D を扱うインタフェースとしては未発達なので、これがよいのか
いまいちわかりません。

Kosuke Shinoda

unread,
Apr 25, 2020, 10:20:15 AM4/25/20
to QGIS初心者質問グループ
ありた様、ありがとうございます。

arrayが頂点座標を示しているのですね。Rudyのスクリプトも教えていただき、ありがとうございます。

やってみます。
Reply all
Reply to author
Forward
0 new messages