2015年12月11日金曜日

QGIS GEOHEX Plugin

NPO法人 オープンコンシェルジュ の松浦です。

この記事は FOSS4G Advent Calendar 2015 の 12/11 の記事でっす。

みなさん GEOHEX ってご存知ですか?
GEOHEX は @sa2da 氏が開発した世界地図を隙間なく敷き詰める六角形(ヘックス)です。

GeoHash やタイルスキーマの六角形版のようなものをイメージしてもらえればいいと思います。

こちらで @sa2da 氏作成のデモが見られます。

GEOHEX の詳しい仕様については公式ページをご参照ください。

で、本題に入りますが、GEOHEX は見た目もかっこいいし、便利に使えると思うので多くの人に使ってほしいのですが、簡単に GEOHEX を作成するようなツールがありません。
GEOHEX を扱うためのライブラリは多くの言語に対して実装されていますが、できることなら GUI でサクッと作りたいですよね。

というわけで QGIS の Plugin にしてみました。
2年前に Python 用のライブラリを書いていたのでそれを使用してやっつけで作りました。
(Python ライブラリもライセンスを定義しないまま放置していたので MIT ライセンスをこの機会に設定・・・)

使ってみよう

QGIS にこの Plugin を入れると、下のように緑の六角形のアイコンが追加されます。アイコンがダサいのは許して。
これをぽちっと押すとダイアログが出て、GEOHEX のレベル(サイズ)と作成範囲の元となるレイヤを設定します。

レベルは 0 から数字が大きくなるにつれて GEOHEX のサイズは小さくなります。キャプチャの表示範囲でレベル 9 とか 10 にすると QGIS 様が沈黙しやがりますので注意してください。

作成範囲 (Set extent from:) はレイヤを選択するとそのレイヤを内包する最小の四角形の範囲と重なる GEOHEX がすべて生成されます。リストの最後の "Current Map Window" を選択すると表示されている範囲を六角形が埋め尽くします。やってみよう。



これでレベル 5 です。次にちょうど地図の中央に見えるポイントレイヤー(室蘭市公開のAED設置場所を示すオープンデータ)を内包する範囲で作成します。レベル 9 で!



かなり拡大しましたが、それでも細かいw



Plugin の入手とインストール

現在この Plugin は QGIS の公式 Plugin レポジトリに登録中ですが、まだ許可?が出ていないので QGIS の Plugin ツールからインストールすることはできません。
そしてやっつけのコードで許可してもらえるのか怖いw

というわけで使ってみたいという方は以下のリンクからダウンロードしてください。
https://onedrive.live.com/redir?resid=F359D930199F0E64!1592&authkey=!AFTJ10mLaGzO4Ys&ithint=file%2czip

ダウンロードしたら zip ファイル内の「GEOHEX」フォルダを QGIS の Plugin ディレクトリにフォルダごとコピーしてください。
Windows の場合は「C:\Users\ユーザー名\.qgis2\python\plugins」、Unix 系 OS の場合は 「~/.qgis2/python/plugins」ですかね?。
コピー後に QGIS を再起動すればインストール完了です。

その他注意事項など

GEOHEX レイヤーの保存先

作成された GEOHEX レイヤーはメモリ上に保存されます。なので、広範囲で細かい HEX を発生せるとメモリを圧迫するので気を付けてください。
また、メモリ上に保存されていますので QGIS を終了すると消えます。保存したい場合は Shape File や sqlite あたりにエクスポートしてください。

GEOHEX レイヤーの空間参照

そもそも GEOHEX は Web Mercator 前提の仕様ですが、ミクロなスケールでは他の座標系でも使えると思っています。なので現状この Plugin では範囲指定に使用したレイヤーの空間参照を引き継ぎます。
"Current Map Window" を設定した場合には QGIS で現在表示されている地図の空間参照を引き継ぎます。

無謀なレベル設定はやめよう

えっと、たとえば地理院地図を表示して、Extent の対象に選んでしまうと全世界を埋める GEOHEX が作成されます。この時にレベル 0 とかならまだしも 10 とかやっちゃうと高確率でレスポンスが途絶えます。マシンスペックにもよりますが。
警告とか出さずに愚直に六角形を紡いでいく真面目な Plugin なのでユーザー様が気を付けていただければ幸いです。

まだ beta1 です

せっかく作ったので、拡張したりバグをつぶしたりしていく予定です。
直近の課題としては、GEOHEX の最新バージョンに対応していないので早急に対応したいです。ほとんど変わらないと思いますが、-180 度をまたぐ HEX でのコードの扱いが変わっているようでした。

まとめ

GEOHEX は本当にかっこいいし便利だとおもっているので、これからいろいろ実利用を検討していきたいなと思っています。

かっちょえー UI の地図アプリに表示された GEOHEX をぽちっとタップするとドローンがそこに飛んでいくとか!

オープンデータの可視化とかにも使えそうですよね。

以上今年の年末の一番大事な仕事を終えます。
次は yuskesuzki@github さんです!