地理院地図拡張を geojson 化¶
何気なく地理院地図のサイトを開いてツールをいじっていた時、 作図ツールの中に円があることに初めて気付いた。これ、前から あったっけか。それとも最近追加されたのか。
大雑把に範囲指示したい時にポリゴンよりも楽ちんかなと思い、 ちょっと作図してみたが、保存する時、KML と geojson でコードが違った。 KML だとポリゴン扱いで、円弧上の30個くらいの点を繋いで疑似円を 描画するようなコードだったのに対し、 geojson だと CircleMarker という 円図形の扱いで、中心座標と半径から円を描画するようなコードが出た。
これを見て、短絡的に、geojson には円が定義されているのかと思ったが、 調べてみるとそうではなく、geojson の規格にはKMLと同様に点・線・ポリゴンしか 定義されていない。じゃあ CircleMarker というのは何かと言うと、 Leaflet という JavaScript ライブラリで定義されているマーカだった。
以前調べた時には、地理院地図ではKMLかgeojsonでレイヤを記述できるが、 geojsonの方はまだ仕様が詰められていなくて、変更の可能性がある、という ことだったので、自作 Sphinx 拡張では KML を生成するようにしたのだった。 でも円が使えると便利だなーと思い、geojson を出力するように書き直した。
geojson形式だと、アイコンにアンカー点を指定できるので、Google Map で よく見られるピン/バルーン型のマーカアイコンも精確な位置に表示できる。 これも書き直す動機のひとつではあったが、改めて表示させたいデータを見ると、 特定の地域では点が密集していて、バルーン型のアイコンは明らかに邪魔すぎる と思い、従来の小ボタン型アイコンを使い続けることにした。
細かな点では、KML形式では色指定がなぜか #bbggrr というフォーマットで あったが、geojson では普通に #rrggbb で、混乱が少なくて良い。 あと半径の指定は、Leaflet のドキュメントにはピクセル単位と書かれているが、 地理院地図ではメートル単位のようだ。単位変換してから Leaflet に流している んだろう。