ベクタータイルマップの紹介

FOSS4G Advent Calendar 2013 7日目 参加記事です。

正直なところ、ブログのタイトルに「GIS」と掲げながら、GISの勉強があまり進んでいない(D3ばっか弄っていた一年だった)ので、ネタが見つからなかったのですが、せっかくお誘いいただいた話なので、D3周辺で見つけたGISにかかわりがありそうな技術について紹介してみようと思います。

D3.jsを使ったベクタータイルマップです。

vectorTileMap1

example

コードについては下記のサンプルそのままなので、そちらを参照してください。
OpenStreetMap Vector Tiles with D3

【ちょっとだけ解説】

OpenStreetMapのMapnik Vector Tiles API(β版)を使用することで、ラスタ地図のAPIでおなじみの{z}/{x}/{y}方式使ってベクター情報を取得することができます。

具体的には、下記のようなURLにリクエストを投げると、画像ではなくその位置のGeoJSONデータを返してきます。

http://tile.openstreetmap.us/vectiles-highroad/12/656/1582.json

取得したGeoJSONデータを、D3.jsを使ってフロントエンド側でsvg:PATH要素に変換して表示したものが上記のサンプルです。

デベロッパーツールでエレメントを確認すると、タイル毎に一つのSVG要素が追加され、そのなかに多数のPath要素が含まれているのが確認できます。

vectorTileMap2

SVG要素なのでフロントエンド側でのカスタマイズが、ラスタ画像に比べて非常に柔軟に行えます。
カラーの変更やイベントの設置なども自在に行えるので、非常に面白いのですが残念ながら実用的な速度では動作しません。

特に、東京のような情報量の多い都市を表示すると非常に重くります。

当然、この上にさらに情報を重ねて表示すればますます遅くなるわけで、今のところは実用性はありませんが今後期待したい技術だと思い、紹介させていただきました。

カテゴリー: D3v3