Follow @honjo2







マピオンの地図は2009年4月にリニューアルしましたが、地図画像だけでなく、
配信システムもリプレースしました。
(実際は、2008年12月上旬からマピオンBBでひっそりと公開していました)
地図画像データの事前作成
配信パフォーマンスのため、事前に、地図データから地図画像(以下タイル)を作成しています。
地図データとは、ゼンリン社などから提供された図形情報や属性情報のことです。
この地図データから、GISツールのMapServerを使ってタイルを作成しています。

全てのタイルを作る場合、40数コアで大体1週間くらいかかります。(サーバを増やせばもっと短くなる)
タイルとは?
メルカトル図法で投影した世界地図を各縮尺256x256の単位で分割し、左上から右下に向かって連番を付けた地図画像データのことです。

世界測地系の-180°85°を左上として、256x256の単位で分割し、各タイルに連番を振ります。
世界測地系と日本測地系
システム内では世界測地系で統一されています。
ただ、マピオンの歴史上、ずっと日本測地系を使用してきたため、表面上は日本測地系がデフォルトです。
緯度経度とピクセル座標(原点同じ)の解決
緯度経度からピクセル座標に変換できれば、対象のタイルがわかります。
逆に、ピクセル座標から緯度経度に変換できれば、対象の緯度経度がわかります。
このことから、相互変換式さえ用意できれば、地図を思いのまま操ることができるということになります。
ちなみに、マピオンでは1インチ=72ピクセル(72dpi)としています。
地図画像API
事前に作っておいたタイルを利用して、地図を配信するAPIです。
ここでは以下の2点を紹介します。(他に、地図上にオブジェクトを合成したりするAPIなどありますが、ここでは紹介を控えます)
1. 地図画像のサイズ指定配信
緯度経度、縮尺レベル(若しくは縮尺分母)とサイズを指定します。
各画像フォーマット、テキスト(XML, JSON, JSONP)に対応しています。

2. 地図画像のタイル番号指定配信
タイル番号と縮尺レベル(若しくは縮尺分母)を指定します。
出力は256x256の8bitPNG画像とテキストのみです。
フリースクロールAPIからの利用のためだけに作りました。
これは、タイル1枚をそのまま出力しているため、Mapと比べて圧倒的にパフォーマンスが良いです。

フリースクロールAPI
地図をスクロールさせるためのJavaScriptAPIです。
相互変換式とTileを使ってスクロールを実現しています。
他に、Flash版もあります。
キャッシュ
Map, Tile共に、APサーバより上位にあるproxyサーバによりキャッシュされます。
ブラウザキャッシュがあり、URIが同一の場合、If-Modified-Sinceを付けてリクエストせずに、
ブラウザのみで完結することがあります。
これを回避するため、地図画像APIには、バージョンを表すvパラメータがあります。
地図が一新され、バージョンが上がった場合、フリースクロールAPIが動的に最新バージョンを取得し
リクエストURIを組み立てます。
メモリキャッシュ
DB負荷軽減のためメモリキャッシュシステムを使っています。
ASP提供や複数の地図デザイン配信などを考慮し、DBにデータを格納しているため必要不可欠です。
また、Mapによるタイル読み込みのオーバーヘッドが大きいため、
ある程度タイルをメモリに置くことも考えています。
システム構成
最後にシステム構成を図示します。


-
この記事のトラックバックURLhttp://labs.mapion.co.jp/mtos/mt-tb.cgi/33





