1000以上のルートを、ユーザごとの地図に投影する方法(1) - はじめに


最近日記が続けられているので、技術的なネタも書いてみようかと思います。
一気に書くのも大変ですし、複数回に分けて書きます。


今のヤマレコの機能として、「地図上にルートをクリックして残す」
というものがあります。
そうすると「自分が行ったルートで地図が埋まっていく」という
楽しみを得るために、過去に行ったルートを1枚の地図上に投影したい
というニーズが出てきました。



※上図は「性能的に問題あるけど、とりあえず作ってみた」版


■要件:
地図上にルートを表示したい。表示の集計方法は
・システム全体
・グループごと
・ユーザごと
の3種類、現時点で言うとシステム全体(1)+グループ数(85)+ユーザ数(1800)、
つまり2000弱種類のルート地図を表示する必要がある。


■方法検討:
方法としては、クライアント側で描くのか・サーバ側で描くのかの2択かと。


方法1)ポイント数を間引きして、Javascriptのpolylineで線画
 ⇒ 作成してみましたが、表示に数分かかってドラッグできないぐらい重いし、
   データは間引きしているので不正確になるし、ちょっと使えそうにないです。


方法2)オーバーレイの機能を使う
 ⇒ Googleマップだけが実現可能。
   地図画像を各縮尺ごとに用意して、Googleの地図の上に重ね合わせて
   ルートを表示する。
   過去にこれなら動作することを確認済み。


■方式決定:
・利用者の立場から考え、体感速度を優先して2で考える。


■クリアすべき課題:
・課題1:地図データの画像数が膨大になる(HDD容量)。
・課題2:作成時間がかかりすぎる影響をどう回避するか。


■作成手順:

  1. Google Mapの仕様確認 & タイル画像の用意(線画方法)
    1. ルートの各座標位置から、タイル画像のピクセル位置特定
    2. 複数のタイル画像をまたがる線画
  2. Google Map上に作成したオーバレイ用のタイル画像を表示
  3. 画像の更新/作り直しのスクリプト作成