0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

国土数値情報の加工に便利なbat / 国土地理院の標高データを統合する方法

Last updated at Posted at 2025-11-24

batコードと,レイヤ結合方法のメモです.
win11, 24H2環境で作成してます.

以下の内容を含みます.

  • 複数のzipファイルの解凍するbat
  • 複数のフォルダ内のデータを同じディレクトリに移動するbat
  • 複数のベクタファイルの統合
  • 複数のラスタファイルの統合
  • 文字列を指定して指定したフォルダに移動するbat

何に使うの?

日本国内のGISデータを使用したいと考えたとき,まず使いたくなるのが国土数値情報だと思う.
データ自体は国土地理の標高データとか国土数情報のサイトから無料でダウンロードできるのでお手軽なわけだが,QGISなどで利用可能な形態に変換するのは非常に面倒くさい.
ちなみに,単に陰影図を描画したいだけで,精度が低くても問題ないならGEBCOのサイトから,指定した座標範囲のラスタデータを直接ダウンロードできる.
海岸線のshpファイルを使用すると描画しやすくなるよ.

image.png
こんな感じのフォームから,ダウンロードしたいグリッドを選択して全ファイルをダウンロードできるが...

image.png
ダウンロード先のディレクトリには大量のzipファイルが生成されてしまい,これの一括解凍が第一の難関になる.

複数のzipファイルを解凍するbat

大量のzipの解凍自体は7-Zipを使用すれば解決するのだが,うぷ主の環境ではエラーを吐いてしまった...
そこで以下のようなbatを作成してみた.

Zipを解凍する
@echo off
setlocal enabledelayedexpansion

:: 解凍対象のディレクトリを指定
set "target_dir=C:\path\to\your\directory"

:: 対象ディレクトリに移動
cd /d "%target_dir%"

:: すべてのZIPファイルを処理
for %%f in (*.zip) do (
    echo 解凍中: %%f
    powershell -command "Expand-Archive -Path '%%f' -DestinationPath '.' -Force"
)

echo 処理が完了しました。
pause

これを適当なtxtエディタに突っ込んで拡張子を.batに変更し,実行すると指定したディレクトリ内のzipファイルを順次解凍してくれる.
※ただし,UTF-8の全角日本語はcmd上で文字化けするので注意

以下のようになる.

image.png

指定したディレクトリを見てみると,zipファイルと同じ数の解凍済みフォルダが生成されている.
image.png

この各フォルダ内に,ラスタデータやベクタデータセットが格納されている.
image.png

複数のフォルダ内のデータを同じディレクトリに移動するbat

QGISを使用する場合,ここまで出来たらそのままファイルのマージに取り掛かれる.
のだが,のちの操作をいろいろと楽にするため,すべてのフォルダ内のデータを同じディレクトリにおいておきたい.
そこで,解凍済みのフォルダのみからなるフォルダを新しく作成.
image.png
G02_12_unfold内にすべてのサブフォルダを格納しておく.
image.png
以下のbatを実行することで,G02_12_unfold内のすべてのサブフォルダ内のファイルをG02_12_unfold/の位置に移動させる.

フォルダ内のデータを同じディレクトリに移動
@echo off
setlocal enabledelayedexpansion

:: 移動元の親ディレクトリを指定
set "source_dir=C:\Users\IWASAKI_YUKATA\Desktop\project"

:: 対象のディレクトリに移動
cd /d "%source_dir%"

:: サブフォルダ内のすべてのファイルを移動
for /r %%d in (*) do (
    if "%%~xd" neq "" (
        echo 移動中: %%d
        move "%%d" "%source_dir%"
    )
)

echo 処理が完了しました。
pause

以下のように,サブフォルダ内のすべてのファイルが移動され
image.png
もとのサブフォルダ内はからっぽになる
image.png

空フォルダは消去してしまったほうがよいと思われ

複数のベクタファイルの統合

ベクタファイルの統合にはQGISを使用できる.
新しいプロジェクトを作成し,
image.png
ベクタ>データ管理ツール>ベクタレイヤをマージ
image.png
image.png
入力レイヤの...>ファイルを追加で先ほどのファイルの入ったディレクトリ内のファイルを指定する(今回は.shp

次にCRSを指定する.
image.png
image.png
ここは何でもいいと思うけど,とりあえずならWGS 84の世界測地系にしておくのが便利かと思う.

適当なファイル名を指定したら実行

できた!
image.png

.shpと一緒に生成されてる.dbfを適当なスプレッドシートで開くと,属性テーブルを確認できる.
image.png
今回の元データは1x1kmのグリッドデータなので,グリッド数と同じ行数のデータテーブルが閲覧できる.

統合前のファイルは消去してよいだろう.

複数のラスタファイルの統合

ここでは特に国土地理院の標高データを統合する手法について解説する.
余談だが,2025/04/01から基板地図情報ダウンロードサービスのフォームが利便性が低いものに改訂されている.
ユーザビリティに配慮できない改定は非常に害悪である

さて,国土地理院の数値データは.xmlファイルとして出力されている.
image.png
この拡張子は,QGISの対応外となっているので,そのまま読み込もうとしてもエラーが出力される.
image.png
ので,先ほどのベクタファイルのように結合をしようとしても...
image.png
image.png
結合はしてくれない.

これを解決する手法は2つある.

  • QGISのプラグインを使用する方法
  • DEMの結合ツールを使用する方法
    それぞれ順に解説していく.

QGISのプラグインを使用する方法

QGISのプラグイン-つまり拡張機能-の一つに,QuickDEM4JPというものがある.
これをインストールすると,指定したディレクトリ内の.xmlファイルを統合してくれる.
image.png
image.png
…特段解説は不要だと思うが,統合したいファイルを選択し,実行するだけで統合した.tifを作成してくれる.

ただし,以下の点に注意

  • メモリの使用量が多い
    どうやら,.xmlの読み込みの際,データをメモリ上にプールするようで,ファイルサイズの合計値分のメモリ容量が消費される.(画像では赤線の時点から処理を開始)
    つまり,合計サイズ50GBのファイルを統合したいなら64GB分のメモリを積む必要があるので,大規模なデータの処理には不適だろう.
    image.png
  • ファイル数が多い場合や座標系が異なる場合エラーが出る.
    これは当然といえば当然.
    座標系については言うに及ばずだが,ファイル数についてはうぷ主の経験上450ファイルを超えるとまず確実に止まる.

そのため,日本列島規模などの大規模なデータを統合する予定なら,以下の手法を試してみてほしい.

DEMの結合ツールを使用する方法

ここでは,株式会社エコリスが提供する基盤地図情報 標高DEMデータ変換ツールを使用する方法について解説していく.
まずは上記のリンクのソフトウェアを入手してほしい.

これもRedMeを読めば済む話だが...
image.png
変換結合.vbsで実行できる.
起動すると以下のような警告が出る.
image.png
これに対処するには,測地系ごとに個別に変換結合.vbsを実行するしかない.

改訂前のサイトからダウンロードした際は,測地系が異なった場合,
FG-GML-4730-00-dem10b-20161001.xml
FG-GML-4731-00-DEM10b-20161001.xml
といった感じに小文字のdemと大文字のDEMで識別できた.

そこで,以下のようなbatを作ってみた.

文字列を指定して指定したフォルダに移動
@echo off
setlocal

:: 指定するディレクトリを設定
set "DIR=H:\20250406151942432-001"

:: "1"フォルダがない場合、作成
if not exist "%DIR%\1" (
    mkdir "%DIR%\1"
)

:: "2"フォルダがない場合、作成
if not exist "%DIR%\2" (
    mkdir "%DIR%\2"
)

:: "dem"を含むファイルを"1"フォルダに移動
for %%F in (%DIR%\*) do (
    if /i "%%~nxF" neq "1" if /i "%%~nxF" neq "2" (
        echo %%~nxF | findstr "dem" > nul
        if not errorlevel 1 (
            if "%%~dpF" neq "%DIR%\1\" (
                move "%%F" "%DIR%\1\"
            )
        )
    )
)

:: "DEM"を含むファイルを"2"フォルダに移動
for %%F in (%DIR%\*) do (
    if /i "%%~nxF" neq "1" if /i "%%~nxF" neq "2" (
        echo %%~nxF | findstr "DEM" > nul
        if not errorlevel 1 (
            if "%%~dpF" neq "%DIR%\2\" (
                move "%%F" "%DIR%\2\"
            )
        )
    )
)

endlocal

これで振り分けた先のフォルダを指定し,実行すると...
image.png
フォルダ内に続々と.tif変換されたファイルが生成される.
image.png
最後に統合プロセスが行われ…

image.png
merge.tifという名前の統合されたファイルが生成される.

複数座標系があった場合,座標系ごとに統合ファイルが生成されるので,最後にラスタ>その他>結合を行えばよい.
この結合プロセスではメモリはあまり圧迫されなかったはず...
image.png

以上!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?