微細地形強調タイルサービス作ってみた（動くようになった）

最近は古地図はもちろんさらに地域史郷土史研究に興味が広がったので、ますますGISへのかかわりが片手間になりつつあるこちずふぁんです。
さらに本業がGISあんまり関係ない某有名IT部材の開発会社になりまして、トランザクション分離レベル何それおいしいの（いやそらIT関係者として知ってるけど意識するようなシステム作った経験がなかった）だった私がその辺ガチで議論しないといけなくなりまして、これはまたえらいところに来たなと。
郷土史とかの方の活動もぼちぼちガチなとこに来てるので、両方から圧力受けてGIS活動がおざなりになると思いますが、必要なものはぼちぼち作っていきますので、これからもよろしくお願いいたします。

今回の記事もそういう必要に駆られて作ったもののご紹介です。
[群馬歴史民俗研究会](https://gunrekimin.wordpress.com/)さんの方に、この10月に生まれて初めての人文系学術誌への論文（というか正確には研究ノートですが）を投稿することになりまして、査読受けて「なめとんか顔洗って出直せ」とか言われん限り来春に載るはずです。
それを書くために微地形の分析が必要だったのですが、5mDEM使った高精度等高線を見てもいまいち微地形が読み取れなかったので（というか個人として読み取れても、説得力のある絵を示せそうになかったので）、微地形を表現できる段彩図を探していました。

すると、やまだこーじさんの[地図アート研究所](https://ymd5022002.github.io/map-art-jp/)で、5mDEMから微地形を読み取るための干渉縞段彩図を作るサービスが開発されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/22c1daee-4cf6-538a-7b86-90ad8343a954.png)
この干渉縞段彩図のロジックを改造して、サーバサイドでオンザフライで地理院DEMタイルから干渉縞タイルを作るサービスを作りました。
ソースコードはこちらです（私、プロジェクトにコードネームつけるの好きなので、これもまた後でコードネームに変えるかもです）： https://github.com/code4history/GsiRainbowTile

~~とここまで書いたところで、作ったサービスがうまく動いていないのに気づきました。
Herokuを使って動かしていたのですが、論文書き終わってからここしばらく動かしてなかった間に、なんかHerokuの無料枠とかが変わったのか何なのか、動かなくなっています。
一朝一夕では直せそうにないので、Heroku撤退してCloudFlare Pagesベースの運用などに切り替えた後、記事更新で再紹介したいと思います。
すみません...。~~
12/5、動くようになりました。
技術的な問題でなく、まさかのHerokuの料金プランが変わったのにそれに同意していなかったためでした。
しかもそれに気づいてからも、Herokuに登録していたクレカが[ワコムの流出事件](https://cybersecurity-jp.com/news/75356)の煽りで使えなくなっており、新しいカード登録しようとしたらHerokuの住所バリデーションがなんか誤動作したせいで新カード登録がはねられて...でなんか無駄に時間がかかりました。
が、何とか料金プラン更新できて、12/5 22:00現在動いています。

干渉縞段彩図のロジックを元にしたので基本は干渉縞出力タイルとして作りましたが、どうも私の目には、干渉縞タイルは色が無限にループしますので、低地から高地まで無限に微小地形が強調できるのはいいのですが、どうにも注目させたいところだけを強調させるには不向きに見えました。
そこで、同じ原理で特定の高度範囲だけを7色カラーで段彩図化するタイルも作成しました。
さらに加えて、論文誌が白黒なものですから、７色グレースケールで段彩図化するタイルも作りました。
本当はカラーの方が見よいのですが、仕様なので仕方ありません。

それぞれのURLを以下に紹介します。

#### 干渉縞段彩図タイル
```
https://grt.code4history.dev/dem5/:ch/{x}/{y}/{z}
```
URLテンプレート中、`{x}`、`{y}`、`{z}`は地図APIやGISシステムがタイル座標に合わせて自動で置き換える部分なので、このままAPIなどに与えます。それに対し、`:ch`部分は設定したい値を与えてテンプレートを設定する必要があります。`ch`はCycle Heightの意味で、何mおきに干渉縞の色が1サイクルするかを設定しています。このタイルで、館林市市街を干渉縞で表した例を次に示します。CycleHeightは7mに設定したので、テンプレートは`https://grt.code4history.dev/dem5/7/{x}/{y}/{z}`での例です。
![rainbow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/a3516551-d185-243b-44c4-83ba964e272e.png)

#### 7色カラー段彩図
```
https://grt.code4history.dev/cont7/:sh/:in/{x}/{y}/{z}
```
`:sh`部分はSmallHeightで、一番低い地点を表す色での標高を示します。`:in`はIntervalで、何m間隔で色を変えるかです。全部で7色ありますので、一番上の色での高さは、`:sh + (7 - 1) * :in`になります。このタイルで、同じく館林市市街を表した例を次に示します。SmallHeightは18m、Intervalは1mに設定したので、テンプレートは`https://grt.code4history.dev/cont7/18/1/{x}/{y}/{z}`での例です。
![cont7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/58294940-bb02-c6e2-4c40-8d87e06223e1.png)
また、実際にこのタイルを使って動く例も示します。
論文を書くための取材用に、現地調査用に用意したWebサイトです。実際にこのサイトで見ながら、現地を街歩きしました。
https://code4history.dev/ShibeContour/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/cdff1c2c-256c-4b32-0b98-3dd717017f32.png)

#### 7色グレー段彩図
```
https://grt.code4history.dev/contg/:sh/:in/{x}/{y}/{z}
```
設定内容はカラー版と一緒です。同じ条件での表示例です。
![gray.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/a6e5b4f8-ec0e-afb4-e732-1383f853f537.png)
論文に使ったQGISで描画した図の例も貼り付けておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/5c7721b9-7b99-6289-c454-f4ae7874c4cc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10108/c9dc0c43-364d-04d4-fece-1a7f101ca9b0.png)

一応、上のタイルは5m解像度のDEMを使っていますが、解像度の荒い10mDEMを使ったバージョンなどもあります。が、解像度の低い用途の需要はないのではと思うので、割愛します。
もし必要であれば、ソースコード覗いてもらえればわかると思います。

Herokuの低コスト枠で動かしてますので、使ってもらって構いませんが、QGISでの分析レベルなら問題ありませんが、もしこれでWebでサービス行うとかレベルでガンガン使われると厳しいものがありますので、そのような場合はご自分でHerokuを契約いただいて、GitHubレポジトリもクローンいただいて、ご自分でHerokuデプロイして使っていただければと思います。

作った微地形タイルについては紹介は以上になりますが、最後に、最近私の発表した無料（オープンデータ）地図アイコンセットの紹介なども加えておきます。

* [石造文化財アイコン 長慶(Chokei)](https://github.com/code4history/Chokei)
* [歴史と地図に特化したIT開発を手がけているCode for Historyが、石造文化財をアイコンとして表示できる「長慶（Chokei）」を11月11日に公開](https://www.value-press.com/pressrelease/308926)

以上です。