あの凡例よもう一度〜QGISでArcGIS用の表示再現にチャレンジしてみた〜


![Dec-24-2022 11-32-50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/4a86d426-c39a-313b-005f-c1d5fe117869.gif)

:::note info
これは [FOSS4G Advent Calendar 2022](https://qiita.com/advent-calendar/2022/foss4g)　24日目の記事です。
昨日は @dayjournal さんによる [COMTiles(Cloud Optimized Map Tiles)をAmazon S3にホスティングしてMapLibre GL JSで表示してみた](https://qiita.com/dayjournal/items/b2d9553f9db7574ae7a8) でした。
:::



## はじめに
聖なる夜のジオジサン向け記事です。

https://twitter.com/Yfuru2454/status/1591344504589934595?s=20&t=rJzv9VgCRRuuhLdeQahk8A


GISで用いられるSHPファイルの表示において、ユーザーが塗りの色やパターン、線種など指定できる定義ファイルをスタイルファイルといいます。このうち、、`*.lyr`という形式があり、ESRI社さんによる商用GISソフトである[ArcGISで採用されています](https://esrij-esri-support.custhelp.com/app/answers/detail/a_id/2290/related/1)。
さて、諸般の事情()により、せっかく頑張って作った.lyrファイルをQGIS環境でも再現したいというご相談をたまにいただきます（1.6667件/年くらい）ので、ニッチな手法でありますが、一応メモということでQiitaに書き留めておこうとおもいます。


## 結論
- lyrはQGISの[SLYRプラグイン](https://north-road.com/slyr/)で読み込めました
    - でも完璧ではないかもしれない
    - でも完璧な凡例ってなんだ

## サンプルから見たlyrにおける凡例表示とその経緯
今回のサンプルデータは、環境省が提供している2.5万分の1植生図データとします。
このデータには二次メッシュごとに植生図SHPファイル一式のほかに凡例verXX_esriXX.lyrというスタイルファイルが入っています。ArcGISなどではこのlyrファイルを読み取ることで、環境省が提供している植生図PDFなどと同じ凡例色が再現されるという仕組みです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/41302b52-2b05-a3fd-531d-82d21ae13aab.png)
（↑このlyrをArcGISで読むと↓のような凡例などが再現される、はず）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/7d6a2718-b7ab-6948-3735-964b25d684a1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/7cd46bda-f88b-fdfd-d3db-f9e606297caa.png)

環境省1/25,000　植生図「父島(ちちじま)」より

[H25年発行の植生図GISデータ作成ガイドライン第2.2版](http://gis.biodic.go.jp/webgis/files/sc-012_sakusei_youryou_H28_2.pdf)によると、ArcGISでの作成作業かつlyrファイルの提供はたしかに仕様通りなので致し方なしですよね（というか私も以前このデータ作っていましたし、当時としてこんなすごい主題図表現ができるのはArcGISさんくらいしかありませんでした）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/891e8f43-dcf8-f958-8bf1-9feb5060bc02.png)

その後QGISをメインとした企業や研究機関に移られた方から、植生図SHPはあってもこの凡例表現を再現するには、一つ一つPDFの凡例を見ながらそれっぽく手打ちで再現する一種の[餅から米](https://qiita.com/sorami/items/804dcaa90091f3f3445b#:~:text=%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%81%84%E3%82%8F%E3%82%86%E3%82%8B%E3%80%8C-,%E9%A4%85%E3%81%8B%E3%82%89%E7%B1%B3,-%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82)作業をやるのが大変であるというお嘆きと相談を1.6667件/年くらいの頻度でいただいており、今回のSLYRプラグインでのやり方を探ってみたわけです。なお、SLYRプラグイン自体は2018年あたりからちらほらとTwitterやFOSS4Gの国際コミュニティでは情報が出ておりました。

https://twitter.com/northroadgeo/status/1052037388627628033

たしか出た頃試したのですが挙動も安定しておらずどんなもんかな…と思っていたのですが、去年今年あたりのFOSS4G国際カンファレンスでもまた話が出たりしていたので、ちょっと覗いてみたところかなり進化しており今回そのトライをしてみたわけです。

※それよりうんと前に某wataさんとか某PEmugiさんにも黒魔法でなんとかできないんですかねえ…と駒場のFOSS4GTokyoで~~酔っ払って絡んで~~聞いていたのをなんか思い出した

## やりかた
ではQGISでのトライ方法を見ていきましょう

### インストール
1. QGISのプラグインメニュー→プラグインの管理とインストールを選択。
2. 検索窓にSLY…と入力するとSLYR(Community Edition)が出てくるので選択後インストール
（Community版じゃないLicencen版はもっといろいろすごいことができる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/dc7edfd8-bd70-806d-08d7-cd3ca5644c8e.png)
3. プロセッシングツールバーのSAGAの下あたりに「SLYR」ツリーが建立されているとインストール完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/db753a86-3e4e-006e-b3c8-a1aa6a05f274.png)

※しかしこんなにメニュー増えてたんだ…（もちろんComuunity版での機能制限はあるのでお間違えなく）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/36468077-baac-e328-6136-790b6ff9c58f.png)

### 読み込む

SLYRのHPにあるみたいにドラッグ＆ドロップでぱっと出ると最＆高なんですけどそう簡単にはいかないので今回は手順を追ってやっていきます
![image.png](https://north-road.com/wp-content/uploads/2019/04/Peek-2019-04-16-10-13.gif)

流れとしては
1. lyrの入ったshpを準備
1. lyrをqmlなどに変換
1. qmlを所定のSHPなどに適用
1. (ﾟдﾟ)ｳﾏｰ

になります。なお、今回はMacOSでのQGIS3.22.14で試しています。

**1. lyrの入ったshpを準備**
もととなるshpファイルは環境省生物多様性センターの[自然環境調査Web-GISの調査情報ダウンロード](http://gis.biodic.go.jp/webgis/sc-002.html#webgis/404241)からもってきます。このアタリをクリックしましょう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/c13488c5-b43e-8849-d9da-1dcf427f27e9.png)
そうすると父島のSHPのみが降ってくる…わけでなく、まずアンケート回答という苦行があり、それを乗り越えると東京都で一個（）のZIPがDLされてきます。それを解凍して父島のメッシュ番号であるshp40241.zipを探し出してもう一回解凍します。メッシュ番号がわからない場合は、先程の[自然環境調査Web-GISの調査情報ダウンロード](http://gis.biodic.go.jp/webgis/sc-002.html#webgis/404241)リンクの末尾がメッシュ番号になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/dd934bb8-374c-6777-eda4-6d6626a3032e.png)


**2. lyrをqmlなどに変換**
上記でQGISに準備したSLYRプラグインを使います。

とくにやってもやらなくてもいいのですが、lyrの中身を参照してみましょう
QGISのファイルブラウザタブから解凍した先程の父島の凡例ファイルである「凡例ver1.7_esri91.lyr」(凄い名前だ…)を掘り出して、右クリックし、Extract Symbolsを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/98705f0c-0bf3-2abe-7a6d-26306cc8bfbe.png)

そうすると、大量の塗り凡例が読み出されています。
![aDec-24-2022 16-23-51.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/564eee72-306e-31cd-fc2f-6ae48b460537.gif)

では、qmlに変換しましょう。
プロセッシングツールボックス下部の[LYR datasets]→[Convert　LYR to QML]を選択（上記のlyrファイル右クリックから、Save as QMLでも同じですし、ツール内のSet style from LYR fileでも一発でできますがが正攻法ということで）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/6714d92a-21ac-2525-b28b-0574c59ecf21.png)

先程の父島の凡例ファイルである[凡例ver1.7_esri91.lyr]をinputに選択し
出力するqmlを任意（今回はデスクトップ）場所・名称で指定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/4e81c807-e019-eb23-ea5c-e48d3c8a6600.png)


実行を押すと「そんなフォント無いよ」とエラー出るけど一応成功します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/65194614-b1ba-ecd9-9df2-32489b43a3b9.png)
ここで問題になってるのはArcGISで特定のフォントテキストを凡例の模様(○とか☆とか💩とか)もしくはラベルに使っている場合、変換先の環境に特定のフォントを求めてもそりゃモノがないので困る、というわけです。


**3.qmlを所定のSHPなどに適用**

DLしてきた父島のshpポリゴンをQGISに読み込みます。任意の一色塗りになるのは仕様なのでそりゃそうですよね
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/ba404947-27ac-61ca-9cbb-1765023d6cd9.png)

植生のp494241レイヤをダブルクリックし、左からペンキアイコンのスタイル→下部のスタイル→スタイルを読み込むを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/82cd3c18-4477-d6a1-7f50-99bc43869b53.png)

ファイルからスタイルを読み込み、先程作ったqmlを指定し、下部の「スタイルを読み込む」を押す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/b3159922-9e11-4ef5-73e3-ebb156eea722.png)

全部出ているようなどうかはっきりしないけど
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/a7f7b3fa-26a6-137e-b560-188d9f78bff4.png)

一番左上の▶を押すと、お、なんか読み込めている！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/affe9e52-3c9a-34a0-3038-393a7699b3a0.png)

そして、OKを押すとSHP表示の色が変わるのですが、父島の真ん中に色指定がない…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/29d1f45b-95df-01fa-b813-74eec5f224e6.png)

これはSHPに同梱されてた[凡例ver1.7_esri91.lyr]の凡例定義ファイルが属性に対して全部を網羅していないのが原因かもしれません。あまりしっかりみていないですが、例えば空白の[HANREI_C]=350715が定義にはない（もともと無いのか、qmlに持ってこれてないのかはよくわからない）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/8ffa4958-bc76-afec-8978-3df79b985aec.png)

なお、大島(p523903)などでは比較的出てたりします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/f2678242-37bc-166e-cc06-6fb02d524b5c.png)

また、本州内でもあきる野市(p522941)あたりもnullはほぼなさそうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/af974c9f-df18-775d-716f-d5fdac7343e7.png)

ここで比較のために[環境省webGIS](http://gis.biodic.go.jp/webgis/index.html)の植生タイルと比較をしてみます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/41973576-152a-e55e-7191-d7740954db83.png)

ソースを読んでいると`http://gis.biodic.go.jp/webgis/files/vg67/tile/vg67/{z}/{x}/{y}.png`
がタイルのURLぽいのでこれをお借りしてきます
ここでは割愛しますが、QGISへのタイル登録は[この辺など](https://note.sngklab.jp/?p=627)をご参照ください。

読み込んでみましたら、あきるの市付近はまあまあ良さげですね(わかりやすくするために、SHPの方は赤フチにしています)

![Dec-24-2022 11-32-50.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/4a86d426-c39a-313b-005f-c1d5fe117869.gif)

でもここまで書いてて気がついた！単に色付き植生図見るだけでだったらタイル読んでくるだけでいいやん！
…とはいえ地図タイルの凡例と公表されている植生図のパターンとwebGISとももなんか微妙に差があるような気もしている…🤔うーむ。


# まとめ

…ということでおそらくArcGIS用の凡例スタイルが読めたっぽいではありますが、上記のようにフォントが未対応な場合やそもそも何が正しいのか問題もあり、なんか読めたような読めなかったのかモヤモヤしますが、少なくとも手作業による「餅から米」苦行で延々とスタイルを制作しなくてもよいかもしれません。

しかし、それぞれのユーザーが使っているSHPが同じでも、GISソフト特有のツライ凡例定義によって閉じられていて、環境によって見え方が異なるのは要改善ですね。概念的にはこんなかんじ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100567/8ca1ddb6-4218-c951-f0b5-8f772eed762b.png)

これらのギャップはちょっとした定義ファイルのやりくりによるものですが、GISにおける表現バイアスの古くて新しい問題と思います。

なお、このような凡例定義ファイルと表現ギャップ問題について悩むひとは国内に38人くらいしかいないとおもいますが、その参考となれば幸いです。

しかし産総研の[シームレス地質図](https://gbank.gsj.jp/seamless/use.html)さんはスタイルファイルとしてLYRもSLDもQMLもAVL(!)も出しているのですごいです（AVL(ArcView3.x用スタイルファイル)なんて20年ぶりくらいに聞いた）。比較的汎用性が高くオープン仕様なスタイルファイルはいったいどれがベターなんでしょうか…
[OGCにはSLD](https://www.ogc.org/standards/sld
)とかも載ってたりするのだけれど植生図などのような独特の表現に対応するかは未確認ですね。
…ああそうか、上記の植生データの地図タイルをつくったときのSLD出してもらったらいいのかな…

ということでまとめ。
- lyrはQGISの[SLYRプラグイン](https://north-road.com/slyr/)で読み込めました
    - でも完璧ではかもしれない
    - でも完璧な凡例ってなんだ

かとおもいます。あとポイントとかラインとかラベルデータでは未検証なので、トライしてくれる勇者はおりませぬでしょうか。このほかにも、有償版SLYRではMXDのコンバートもできると書いてあるが人柱で17万円くらいはちょっとつらい、ヒー、サンタさ～ん🎅