ここは何?

その昔、東の電話やさんでD-Mailの中の人だった時代にKemaNetというソフトウェアを作っていた人のサイトです。
(ちなみに今は国際的な電話やさんで、法人向け雲【基本】の仕事をしてます。)
(のあと、未来とつなぐ電話やさんの研究所で雲作ったらそれはそれで大変です)
(のあと、再び国際的な電話やさんで別の雲を作りましたがもう雲を作るのは飽きました)
(2018.02.01 ふたたびバリューパートナーな電話やさんの研究所に戻りました)

にスポットライトを当てるためのサイトです。

最近では 鮨ドラ の普及活動なんかもやっているそうです。

Blogっぽいもの

<< 2020.8 >>
[Stories]
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

2020/8/4 (火)

GISっ子/基盤地図対応GDAL/OGR

はじめに

現時点で意味があるか分かりませんが(後述)、宇宙利用プロジェクト | OSGeo.JP の「基盤地図対応GDAL/OGR」をビルドするコンテナを作ってみました

ビルド

マシンスペックにも寄りますが、30[min] くらいは覚悟したほうが良さげです

curl -L https://gist.github.com/kemasoft-gist/744dd514f9d634de63f40cf6389e954f/raw | podman build - -t kemasoft/mext-gdal^C

ポイント

cplkeywordparser.cpp:255:26: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
 255 |     if( pszHeaderNext == '\0' )

参考

利用例

# コンテナ起動をラクにするために alias を定義
alias prun='podman run --rm -it -v .:/mnt'

# ogr2ogr のバージョン確認
prun kemasoft/mext-gdal ogr2ogr --version
GDAL 1.10.0, released 2013/04/24

# 対応フォーマット一覧(FGDがあることを確認)
$ prun kemasoft/mext-gdal ogr2ogr --formats
Supported Formats:
  -> "ESRI Shapefile" (read/write)
  -> "MapInfo File" (read/write)
(略)
  -> "SEGY" (readonly)
  -> "PDF" (read/write)
  -> "FGD" (readonly)

微妙な点

2020/8/3 (月)

GISっ子/Linuxで基盤地図情報標高DEMデータ変換したい

はじめに

みんなが大好きな 基盤地図情報 標高DEMデータ変換ツール | コンテンツ | 株式会社エコリス をLinuxのCLIで動かしたいと思った人向けの記事です

このデータ変換ツールは、

変換結合.vbs, convert_and_merge.vbs
後述する3つのexeファイルとのインターフェース
dem.exe
基盤地図情報 数値標高データをgeotiffに変換
gdalbuildvrt.exe
vrtファイル(後述のgdalwarp.exeが参照する)を生成
gdalwarp.exe
dem.exeが生成したgeotiffファイルを結合

という作りになっているようです

vbsファイルはCLI化する際は不要、gdalbuildvrtとgdalwarpはGDALパッケージのインストールでOKなので、dem.exe部分をどうにかすれば良いです

案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

# コンテナ内: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 が出来るようになります

案2:wineを使う

面倒な割に利便性が全く上がらないのでお勧めしません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
dem01.jpg

別解

先人の知恵にあやかります(というか最初からこれ見つけていれば・・・)

先述の「案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ファイル名を指定
dem 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
dem02.jpg

別解その2

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 で起動できます

memo

vrd
gdalbuildvrt -overwrite mergeLL.vrt *.tif
JGD2011 緯度経度
gdalwarp -r bilinear -srcnodata None -t_srs epsg:6668 mergeLL.vrt merge-6668.tif
平面座標系12
gdalwarp -r bilinear -srcnodata None -t_srs epsg:6680 mergeLL.vrt merge-6680.tif
-9999
gdalwarp -r bilinear -srcnodata -9999 -dstnodata -9999 -t_srs epsg:6668 mergeLL.vrt merge-6668.tif
zdem2tif
gdalwarp -r bilinear -srcnodata -1 -dstnodata -9999 -t_srs epsg:6668 mergeLL.vrt merge-6668.tif

2020/8/2 (日)

GISっ子/shp2jsonをコンテナで

はじめに

データ変換のためだけにQGIS使うのが辛いのでCLIをよく使います
なるべくOSの環境を変えないで済むよう(いつもの通り)コンテナにします

今回は shp2json, dbf2json です
それぞれ shpファイル、dbfファイルをGeoJSONに変換するコマンドです

この辺でさらっと紹介されてます

コンテナイメージをビルドする

podman build https://gist.github.com/kemasoft-gist/bc28dce9906bf230b5757f03a22b2b91/raw -t kemasoft/shapefile

参考:Dockerfile

参考にさせて頂いたページ

使いやすいようにaliasを切る

alias shp2json='podman run --rm -i -v .:/mnt kemasoft/shapefile shp2json'
alias dbf2json='podman run --rm -i -v .:/mnt kemasoft/shapefile dbf2json'

使用例

国土地理院のデータを使う時は --encoding Shift_JIS を忘れないようにしましょう

shp2json

$ ls *.dbf
20200401-行政区画.dbf  20200401-行政区画界線.dbf  20200401-行政区画代表点.dbf  20200401-町字の代表点.dbf  20200401-町字界線.dbf

$ shp2json --encoding Shift-JIS 20200401-行政区画代表点.shp | jq . | head -n20
{
  "type": "FeatureCollection",
  "bbox": [
    138.632616034,
    35.75000175,
    139.998345505,
    36.331040108
  ],
  "features": [
    {
      "type": "Feature",
      "properties": {
        "id": "K6_5013013062_1",
        "fid": "50130-13062-i-1029",
        "整備データ": 20171204,
        "整備デーA": 0,
        "整備完了日": "20200307",
        "orgGILvl": "25000",
        "orgMDId": null,
        "表示区分": "非表示",

dbf2json

$ ls *.dbf
20200401-行政区画.dbf  20200401-行政区画界線.dbf  20200401-行政区画代表点.dbf  20200401-町字の代表点.dbf  20200401-町字界線.dbf

$ dbf2json --encoding Shift-JIS 20200401-行政区画代表点.dbf | jq . | head -n20
[
  {
    "id": "K6_5013013062_1",
    "fid": "50130-13062-i-1029",
    "整備データ": 20171204,
    "整備デーA": 0,
    "整備完了日": "20200307",
    "orgGILvl": "25000",
    "orgMDId": null,
    "表示区分": "非表示",
    "種別": "郡市・東京都の区",
    "名称": "伊勢崎市",
    "行政コード": "10204"
  },
  {
    "id": "K6_5013613050_1",
    "fid": "50136-13050-i-2033",
    "整備データ": 20191223,
    "整備デーA": 0,
    "整備完了日": "20200307",

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-07-27 (月) 15:29:28