2024年9月15日日曜日

紙等高線地図から地形3Dモデルを作成する方法

 How to create a 3D terrain model from a paper contour map


This article summarizes how to create a 3D terrain model from a paper contour map. 3D models of past terrain that were lost in developments more than half a century ago can only be constructed from paper contour maps. Use QGIS (GRASS plugin). Note that the latest QGIS (3.38) cannot be used due to a bug.


紙等高線地図から地形3Dモデルを作成する方法をまとめました。半世紀以上前の開発で失われた過去地形の3Dモデルは紙等高線地図から構築するしかありません。QGIS(GRASSプラグイン)を使います。なお、バグにより最新QGIS(3.38)は利用できません。

1 紙等高線地図から地形3Dモデルを作成する方法

1-1 4年前の方法

4年前に紙等高線地図から地形3Dモデル作成方法をまとめたことがあります。

2020.12.19記事「紙地図等高線から地形3Dモデルを作成する方法

4年前の方法と今回の方法は基本は同じです。しかし、今回はGRASSGIS本体を使わないでQGIS(GRASSプラグインが導入されているもの)だけで済むようになりました。

1-2 【重要】最新QGIS(3.38)はバグでこの作業はできない

この作業はQGISでGRASSプラグインのv.surf.rstツールを使用します。このv.surf.rstツールは最新のWindows版QGIS(3.38)ではバグにより正常に動作しません。

このバグに気が付かなくて、丸1日無駄な作業を繰り返しました。海外サイトを翻訳で読んでいて、バグがあることを知りました。Linux版QGIS(3.38)では正常とのことです。

仕方がないので、私は旧版のWindows版QGIS(3.12)を利用して、作業しました。

1-3 紙等高線地図の等高線shapeファイル作成

紙等高線地図から等高線shapeファイルを作成する必要があります。

紙等高線地図を画像にして、その画像から直に等高線shapeファイルを作成する方法を私はまだ知りません。(現在開発中です。)

残念ながら次の作業を事前に行う必要があります。

・紙等高線地図を画像にしてQGISにジオリファレンスします。QGISの座標系は直角座標系。

・QGISでジオリファレンスした地図の等高線を1本1本ラインとしてトレースして、標高(Z座標)もそれを書き込めるフィールドを用意して書き込みます。このデータをshapeファイルとして保存します。

1-4 GRASS GISプロジェクトの作成

● GRASS GIS プロジェクトのセットアップ

・QGISを起動し、GRASSプラグインを有効化します。

・「処理」メニューの「GRASSツールボックス」を開きます。

・新しいGRASSプロジェクトを作成します。

  ・「場所」(Location) と「マップセット」(Mapset)を設定する必要があります。これはGRASSが使用する空間データベースで、データの管理に使用します。

  ・「GRASS新しい場所を作成」から座標系を指定します。等高線データの座標系(例:EPSGコード)を設定してください。

1-5 データのインポート

● 等高線のインポート

・GRASS GISにshapefileをインポートする必要があります。

・QGISのGRASSツールボックスから「v.in.ogr」ツールを使用して、等高線shapefileをインポートします。

  ・パラメータ:

    ・input: 等高線のshapefileのパス

    ・output: インポート後のGRASS内部でのベクトルマップ名

    ・レイヤーを確認して正しいベクトルデータがインポートされたかを確認してください。

1-6 等高線データからDEMの作成

1-6-1 v.surf.rst(スプライン補間)を使用したDEM作成

・GRASS GISで等高線データから補間を行い、DEMを作成します。補間にはv.surf.rstツールを使用します。これは、張力付き正則化スプライン補間を行い、点や等高線データから表面を推定するものです。

 手順:

・QGISの「GRASSツールボックス」から、v.surf.rstを検索し実行します。

  ・input:インポートした等高線のベクトルマップを選択します。

  ・zcolumn:等高線のZ値(標高)が格納されている属性フィールドを選択します。

  ・elevation:出力するDEMのラスター名を指定します。

  ・その他オプション:

    ・tension: スプラインの張力(通常はデフォルト値で問題ありませんが、必要に応じて調整します)。

    ・smooth: スムージングパラメータ(データが非常にノイズが多い場合に使用することがあります)。

・実行をクリックして、補間処理を実行します。

1-6-2 出力DEMの確認

・補間処理が完了すると、GRASSデータベース内にラスター形式でDEMが作成されます。

・QGISのメインウィンドウにDEMを表示し、正しく作成されているか確認します。これは浮動小数点形式の標高データとして表示されます。

1-7 DEMのエクスポート

・GRASS GIS内部で作成されたDEMをshapefileやGeoTIFF形式にエクスポートするには、r.out.gdalを使用します。これはGRASS GIS内のラスターを外部フォーマットに変換するためのツールです。

手順:

1-7-1 QGISの「GRASSツールボックス」から、r.out.gdalを検索し実行します。

  ・input:作成したDEMラスターを選択します。

  ・output:エクスポートするファイルのパスを指定します(例:GeoTIFF形式で保存する場合、output.tifと指定)。

  ・format:GeoTIFFなど、必要なフォーマットを指定します。

1-7-2 実行をクリックしてDEMをエクスポートします。

1-8 DEMの可視化と解析

・QGISの「ラスタ」メニューや「3D表示」ツールを使用して、生成されたDEMの可視化や地形解析(例:斜度、方位の計算など)を行うことができます。

(1-4~1-8はChatGPT説明です。私が作業で確かめています。)

2 感想

2-1 等高線画像からラインのshapeファイルを作成する方法

等高線画像からラインのshapeファイルを作成する方法の開発に取組んでいます。現状では等高線画像の等高線は必ず幅がありますから、これをラインとして読みとることに成功していません。幅のある線を幅の無い線に変換する方法は世の中には必ずやあると思うのですが。紙地図から等高線shapeファイルが簡単につくれるようになると、この作業は恐ろしいほど効率化が進みます。

2-2 紙等高線地図から地形3Dモデルを作成するニーズは小さい

紙等高線地図から地形3Dモデルを作成するニーズはとても小さいので、QGISにバグがあっても日本ではそのバグに気が付く人はいないようです。QGISでv.surf.rstツールが使えないという質問が幾つかのサイトにありますが、その解決策となる回答はありません。開発前地形、失われた地形の3Dモデル作成に関心のある人は大変少ないようです。このような状況なので、私が丸1日の時間を無駄にし、イライラし、自信喪失したことは、支払わなければならなかった必要経費として納得しなければならないようです。


等高線から作成した地形3Dモデル(QGISプラグインQgis2threejs画面)


9 件のコメント:

  1. はじめてコメントします、”開発前地形、失われた地形の3Dモデル作成に関心のある”数少ない一人です。私は地質調査所の1902年発行の地図を基に3D化しました、直接GRASSで行いました。これは言われているとおり過去にタイムスリップできる大変楽しいものですね。

    返信削除
  2. nobuさん コメントありがとうございます。GRASSGISで直接行えばよいことであり、何もQGISを媒介しなくてもよいとのご指摘は、気が付けば、その通りです。目からうろこです。こんど、GRASSだけで作業してみて、その操作性を体験して、QGISとくらべてどうか、検討してみます。情報、感謝します。

    返信削除
    返信
    1. arakiさん ブログ参考にさせていただいております、わたしも紙地図のトレースは使い勝手の良いqgisを使っています、(これが本当に大変です)、宜しければ情報交換ができれば幸いです。(中々arakiさんについて行くのは大変と思いますが)

      削除
    2. nobuさん こちらこそよろしくお願いします。じつは趣味活動で等高線から3Dモデル作成をメインとする「大仕事二つ」を近々予定していて、その前にv.surf.rstツールの使い方に習熟している最中です。技術的な事柄について情報交換できればうれしいです。トレースの効率的方法などについても教えていただければありがたいです。よろしくお願いします。

      削除
    3. 早速返信ありがとうございます。トレースは一度qgisのラスベク変換でやってみましたが地図が手書きの為かあまりうまくいきませんでした、とりあえず肉体的負担を減らすためwacomのintuosタブレットを使っています、grass gisは8,2を使っています。色々不具合があります。

      削除
    4. タブレットで線のトレースをすると肉体的負担が減るとのことですが、タブレット画面にペンを当てて、次々にクリックしていくと線が引けるから、マウスよりよいということでしょうか、あるいは鉛筆で紙に線を描くように、タブレット画面で線をペンでなぞっていくのでしょうか。

      削除
    5. qgis3,28で,ジオリファレンスした紙地図の等高線をストリームデジタイジング機能でペンタブレット上でトレースしていきます、マウスをペンに持ち替えただけですがより自然に動かすことができます(個人的感想)。私がトレースした地図は2万分の1で2km×3km四方の範囲2種類でしたが中々根気のいる作業でした。トレースの自動化が欲しいところです。因みにペンタブレットと㍶の接続は有線にしています。

      削除
    6. 正面にある画面を見ながらマウスで操作するよりも、机上の大判のタブレットでペンでクリックしながらトレースする方が筋肉感覚的にやりやすいのだと思います。財布が許せばいつか導入したいです。1本トレースしてその標高を入力するのはタブレットで出来るのでしょうか、キーボードマウスにもどるのでしょうか。

      削除
  3. 私が使用しているのはCTL-6100です、私のやり方はqgisでトレース用のベクターレイヤを作成、属性テーブルでelevationフィールドを作成、地物追加でトレース、適当な長さでペンに割り当てたクリックで属性フォームで標高を入力(右手でトレース、左手でキーボード標高入力)ラインを直したいときは編集のジイオメトリー編集で修正あとはスナップ等を使いつなげていき、目的の標高を入力し終わったら地物の結合をして完了です。

    返信削除