これは FOSS4G Advent Calendar 2022 24日目の記事です。
昨日は @dayjournal さんによる COMTiles(Cloud Optimized Map Tiles)をAmazon S3にホスティングしてMapLibre GL JSで表示してみた でした。
はじめに
聖なる夜のジオジサン向け記事です。
GISで用いられるSHPファイルの表示において、ユーザーが塗りの色やパターン、線種など指定できる定義ファイルをスタイルファイルといいます。このうち、、*.lyr
という形式があり、ESRI社さんによる商用GISソフトであるArcGISで採用されています。
さて、諸般の事情()により、せっかく頑張って作った.lyrファイルをQGIS環境でも再現したいというご相談をたまにいただきます(1.6667件/年くらい)ので、ニッチな手法でありますが、一応メモということでQiitaに書き留めておこうとおもいます。
結論
- lyrはQGISのSLYRプラグインで読み込めました
- でも完璧ではないかもしれない
- でも完璧な凡例ってなんだ
サンプルから見たlyrにおける凡例表示とその経緯
今回のサンプルデータは、環境省が提供している2.5万分の1植生図データとします。
このデータには二次メッシュごとに植生図SHPファイル一式のほかに凡例verXX_esriXX.lyrというスタイルファイルが入っています。ArcGISなどではこのlyrファイルを読み取ることで、環境省が提供している植生図PDFなどと同じ凡例色が再現されるという仕組みです。
(↑このlyrをArcGISで読むと↓のような凡例などが再現される、はず)
環境省1/25,000 植生図「父島(ちちじま)」より
H25年発行の植生図GISデータ作成ガイドライン第2.2版によると、ArcGISでの作成作業かつlyrファイルの提供はたしかに仕様通りなので致し方なしですよね(というか私も以前このデータ作っていましたし、当時としてこんなすごい主題図表現ができるのはArcGISさんくらいしかありませんでした)。
その後QGISをメインとした企業や研究機関に移られた方から、植生図SHPはあってもこの凡例表現を再現するには、一つ一つPDFの凡例を見ながらそれっぽく手打ちで再現する一種の餅から米作業をやるのが大変であるというお嘆きと相談を1.6667件/年くらいの頻度でいただいており、今回のSLYRプラグインでのやり方を探ってみたわけです。なお、SLYRプラグイン自体は2018年あたりからちらほらとTwitterやFOSS4Gの国際コミュニティでは情報が出ておりました。
たしか出た頃試したのですが挙動も安定しておらずどんなもんかな…と思っていたのですが、去年今年あたりのFOSS4G国際カンファレンスでもまた話が出たりしていたので、ちょっと覗いてみたところかなり進化しており今回そのトライをしてみたわけです。
※それよりうんと前に某wataさんとか某PEmugiさんにも黒魔法でなんとかできないんですかねえ…と駒場のFOSS4GTokyoで酔っ払って絡んで聞いていたのをなんか思い出した
やりかた
ではQGISでのトライ方法を見ていきましょう
インストール
- QGISのプラグインメニュー→プラグインの管理とインストールを選択。
- 検索窓にSLY…と入力するとSLYR(Community Edition)が出てくるので選択後インストール
(Community版じゃないLicencen版はもっといろいろすごいことができる)
- プロセッシングツールバーのSAGAの下あたりに「SLYR」ツリーが建立されているとインストール完了
※しかしこんなにメニュー増えてたんだ…(もちろんComuunity版での機能制限はあるのでお間違えなく)
読み込む
SLYRのHPにあるみたいにドラッグ&ドロップでぱっと出ると最&高なんですけどそう簡単にはいかないので今回は手順を追ってやっていきます
流れとしては
- lyrの入ったshpを準備
- lyrをqmlなどに変換
- qmlを所定のSHPなどに適用
- (゚д゚)ウマー
になります。なお、今回はMacOSでのQGIS3.22.14で試しています。
1. lyrの入ったshpを準備
もととなるshpファイルは環境省生物多様性センターの自然環境調査Web-GISの調査情報ダウンロードからもってきます。このアタリをクリックしましょう
そうすると父島のSHPのみが降ってくる…わけでなく、まずアンケート回答という苦行があり、それを乗り越えると東京都で一個()のZIPがDLされてきます。それを解凍して父島のメッシュ番号であるshp40241.zipを探し出してもう一回解凍します。メッシュ番号がわからない場合は、先程の自然環境調査Web-GISの調査情報ダウンロードリンクの末尾がメッシュ番号になります。
2. lyrをqmlなどに変換
上記でQGISに準備したSLYRプラグインを使います。
とくにやってもやらなくてもいいのですが、lyrの中身を参照してみましょう
QGISのファイルブラウザタブから解凍した先程の父島の凡例ファイルである「凡例ver1.7_esri91.lyr」(凄い名前だ…)を掘り出して、右クリックし、Extract Symbolsを選択します
では、qmlに変換しましょう。
プロセッシングツールボックス下部の[LYR datasets]→[Convert LYR to QML]を選択(上記のlyrファイル右クリックから、Save as QMLでも同じですし、ツール内のSet style from LYR fileでも一発でできますがが正攻法ということで)。
先程の父島の凡例ファイルである[凡例ver1.7_esri91.lyr]をinputに選択し
出力するqmlを任意(今回はデスクトップ)場所・名称で指定
実行を押すと「そんなフォント無いよ」とエラー出るけど一応成功します。
ここで問題になってるのはArcGISで特定のフォントテキストを凡例の模様(○とか☆とか💩とか)もしくはラベルに使っている場合、変換先の環境に特定のフォントを求めてもそりゃモノがないので困る、というわけです。
3.qmlを所定のSHPなどに適用
DLしてきた父島のshpポリゴンをQGISに読み込みます。任意の一色塗りになるのは仕様なのでそりゃそうですよね
植生のp494241レイヤをダブルクリックし、左からペンキアイコンのスタイル→下部のスタイル→スタイルを読み込むを選択
ファイルからスタイルを読み込み、先程作ったqmlを指定し、下部の「スタイルを読み込む」を押す
そして、OKを押すとSHP表示の色が変わるのですが、父島の真ん中に色指定がない…
これはSHPに同梱されてた[凡例ver1.7_esri91.lyr]の凡例定義ファイルが属性に対して全部を網羅していないのが原因かもしれません。あまりしっかりみていないですが、例えば空白の[HANREI_C]=350715が定義にはない(もともと無いのか、qmlに持ってこれてないのかはよくわからない)
また、本州内でもあきる野市(p522941)あたりもnullはほぼなさそうです。
ここで比較のために環境省webGISの植生タイルと比較をしてみます
ソースを読んでいるとhttp://gis.biodic.go.jp/webgis/files/vg67/tile/vg67/{z}/{x}/{y}.png
がタイルのURLぽいのでこれをお借りしてきます
ここでは割愛しますが、QGISへのタイル登録はこの辺などをご参照ください。
読み込んでみましたら、あきるの市付近はまあまあ良さげですね(わかりやすくするために、SHPの方は赤フチにしています)
でもここまで書いてて気がついた!単に色付き植生図見るだけでだったらタイル読んでくるだけでいいやん!
…とはいえ地図タイルの凡例と公表されている植生図のパターンとwebGISとももなんか微妙に差があるような気もしている…🤔うーむ。
まとめ
…ということでおそらくArcGIS用の凡例スタイルが読めたっぽいではありますが、上記のようにフォントが未対応な場合やそもそも何が正しいのか問題もあり、なんか読めたような読めなかったのかモヤモヤしますが、少なくとも手作業による「餅から米」苦行で延々とスタイルを制作しなくてもよいかもしれません。
しかし、それぞれのユーザーが使っているSHPが同じでも、GISソフト特有のツライ凡例定義によって閉じられていて、環境によって見え方が異なるのは要改善ですね。概念的にはこんなかんじ。
これらのギャップはちょっとした定義ファイルのやりくりによるものですが、GISにおける表現バイアスの古くて新しい問題と思います。
なお、このような凡例定義ファイルと表現ギャップ問題について悩むひとは国内に38人くらいしかいないとおもいますが、その参考となれば幸いです。
しかし産総研のシームレス地質図さんはスタイルファイルとしてLYRもSLDもQMLもAVL(!)も出しているのですごいです(AVL(ArcView3.x用スタイルファイル)なんて20年ぶりくらいに聞いた)。比較的汎用性が高くオープン仕様なスタイルファイルはいったいどれがベターなんでしょうか…
OGCにはSLDとかも載ってたりするのだけれど植生図などのような独特の表現に対応するかは未確認ですね。
…ああそうか、上記の植生データの地図タイルをつくったときのSLD出してもらったらいいのかな…
ということでまとめ。
- lyrはQGISのSLYRプラグインで読み込めました
- でも完璧ではかもしれない
- でも完璧な凡例ってなんだ
かとおもいます。あとポイントとかラインとかラベルデータでは未検証なので、トライしてくれる勇者はおりませぬでしょうか。このほかにも、有償版SLYRではMXDのコンバートもできると書いてあるが人柱で17万円くらいはちょっとつらい、ヒー、サンタさ~ん🎅