みんなが大好きな 基盤地図情報 標高DEMデータ変換ツール | コンテンツ | 株式会社エコリス をLinuxのCLIで動かしたいと思った人向けの記事です
このデータ変換ツールは、
という作りになっているようです
vbsファイルはCLI化する際は不要、gdalbuildvrtとgdalwarpはGDALパッケージのインストールでOKなので、dem.exe部分をどうにかすれば良いです
容易に使えるよう、コンテナ化してみました
# コンテナのビルド(10分くらいかかります)
podman build https://gist.github.com/kemasoft-gist/c5a837b62b4758996c3341d65c8f43b1/raw -t kemasoft/gdal
# コンテナでbashを起動する(カレントディレクトリを /mnt にマウント)
podman run --rm -it -v .:/mnt kemasoft/gdal bash
# コンテナ内:dem -> geotiff 変換
# dem <dem-xml> <0|1> <output.tif>
# 第1、第2引数はオリジナルと一緒
# 第3引数に出力先tifファイル名を指定
dem ls FG*.xml | sed 's/.xml$//' | xargs -I@ -P4 dem @.xml 1 @.tif
# コンテナ内:vrtファイル作成
gdalbuildvrt -overwrite mergeLL.vrt *.tif
# コンテナ内:geotiffファイル結合
gdalwarp -r bilinear -srcnodata -9999 -dstnodata -9999 -t_srs epsg:6668 mergeLL.vrt merge.tif
ソース変更箇所
$ diff -u dem.cpp{.orig,} --- dem.cpp.orig 2020-08-02 08:01:11.360533403 +0900 +++ dem.cpp 2020-08-02 08:11:00.022764072 +0900 @@ -1,3 +1,12 @@ +/* + Copyright (c) 2020 Nobuhiro OKI + Released under the MIT license + https://opensource.org/licenses/mit-license.php + + Original: + https://github.com/tmizu23/demtool/blob/master/dem.cpp +*/ + #include "gdal_priv.h" #include "ogr_spatialref.h" #include "gdalwarper.h" @@ -189,11 +198,14 @@ char fname[256]; char ext[256]; char outpath[1024] = ""; + /* kemasoft _splitpath(argv[1], drive, dir, fname, ext); strcat(outpath, drive); strcat(outpath, dir); strcat(outpath, d0.mesh); strcat(outpath, ".tif"); + */ + strcat(outpath, argv[3]); // kemasoft makeGeotiff(&d0, outpath, nodata); free(d0.alti); return d0.jgd;
これでGDAL導入済み環境で g++ dem.cpp -odem -lgdal が出来るようになります
面倒な割に利便性が全く上がらないのでお勧めしませんw
ポイントだけ書いておきます
# コンテナのビルド
# オリジナル scottyhardy/docker-wine との差分
# /mnt のパーミッション変更、sudo, vim, build-essential追加)
curl -L https://gist.github.com/kemasoft-gist/b4d101eaa922df66c5660e394314d7ca/raw | podman build - -t kemasoft/docker-wine
# コンテナ起動
podman run -it \
--rm \
--name wine \
-d \
-v .:/mnt \
--hostname="$(hostname)" \
--env="RDP_SERVER=yes" \
--publish="13389:3389/tcp" \
kemasoft/docker-wine tail -f /dev/null
# MDACインストールまではGUIを使うのが無難
# リモートデスクトップで母艦のIP:13389に接続し、その中のターミナルで作業
# 一旦dem.exeが動いてしまえばそれ以降はCLIでOK
# wineを32bitモードで初期化
WINEARCH=win32 winecfg
# mdac導入
winetricks mdac28
cd /home/wineuser/.cache/winetricks/mdac28
# エラーになった場合の追加手順
cabextract MDAC_TYP.EXE
wine $(winepath -w $(pwd))\\dasetup
# コマンドプロンプト起動
WINEDEBUG=-msvcrt wine cmd
# dem.exe にパスを通し、環境変数 GDAL_DATA を設定
set PATH="%PATH%;Z:\path\to\dem-exe-directory"
set GDAL_DATA="Z:\path\to\dem-exe-directory\data"
# dem.exe を実行
dem FG-GML-6741-71-07-DEM5C-20190221.xml 0
先人の知恵にあやかります(というか最初からこれ見つけていれば・・・)
先述の「案1」で出てきたコンテナに仕込んであります
# コンテナのビルド(10分くらいかかります)
podman build https://gist.github.com/kemasoft-gist/c5a837b62b4758996c3341d65c8f43b1/raw -t kemasoft/gdal
# コンテナでbashを起動する(カレントディレクトリを /mnt にマウント)
podman run --rm -it -v .:/mnt kemasoft/gdal bash
# ここまで「案1」と同じ
# コンテナ内:zipファイルのままgeotiffを生成する例
cd /path/to/dem-file-dir
zdem2tif FG*.zip
# コンテナ内で作業:dem -> geotiff 変換
# dem <dem-xml> <0|1> <output.tif>
# 第1、第2引数はオリジナルと一緒
# 第3引数に出力先tifファイル名を指定
ls FG*.xml | sed 's/.xml$//' | xargs -I@ -P4 dem @.xml 1 @.tif
# コンテナ内で作業:vrtファイル作成(案1と同じ)
gdalbuildvrt -overwrite mergeLL.vrt *.tif
# コンテナ内で作業:geotiffファイル結合
# ★ srcnodata = -1 を指定するのがおすすめです
gdalwarp -r bilinear -srcnodata -1 -dstnodata -9999 -t_srs epsg:6668 mergeLL.vrt merge.tif
fgddem.py/fgddem.py at master · minorua/fgddem.py をLinuxで動くようにちょっと変更します
root@d9395998343a:/usr/local/bin# diff -u fgddem{.py,}
--- fgddem.py 2020-08-02 03:29:45.800481748 +0000
+++ fgddem 2020-08-02 03:21:35.000000000 +0000
@@ -194,7 +194,7 @@
# TODO: testing in Linux
# Wildcards cannot be used for arguments now. See http://trac.osgeo.org/gdal/ticket/4542 (2012/04/08)
else:
- merge_command = 'gdalwarp%s "%s" "%s"' % (gdalwarp_options,
+ merge_command = 'gdalwarp%s %s "%s"' % (gdalwarp_options,
os.path.join(temp_dir, "*.tif"),
dst_file)
こちらも先述の「案1」で出てきたコンテナに仕込んでありますので、コンテナ起動後、
fgddem path/to/xml-or-zip-file で起動できます