広域で地図を表示した時の、マーカーのパース
ブログ | 2008/4/10 18:41
mysqlのスロークエリーログを見ていたら、マーカーのパースでいくつか。
ベースのクエリーは概ねこんな感じ
$minX
$maxY
$minY
は、Javascriptからajaxで投げてくる。$minY > $maxXの時は補正を追加したり。
で、ズームレベルが10以下くらいの広域の時。
対象マーカーが数万個ということになってしまい、ORDER BY dにかなり時間がかかる(1.5秒とか)。
地図全部をみないで、中心からある程度範囲で絞る補正を入れる。
ボストマップの場合、0.4で都内だと5000個、地方で300個くらいが対象になるようなので、とりあえず0.4にしてみた。5000個くらいであれば、0.1秒程なので、ストレスはなさそう。
ベースのクエリーは概ねこんな感じ
SELECT *,(ABS(m.lat-$centerY) + ABS(m.lng-$centerX)) d FROM map m WHERE m.lat between '$minY' AND '$maxY' AND m.lng between '$minX' AND '$maxX' ORDER BY d LIMIT 200;$maxX
$minX
$maxY
$minY
は、Javascriptからajaxで投げてくる。$minY > $maxXの時は補正を追加したり。
で、ズームレベルが10以下くらいの広域の時。
対象マーカーが数万個ということになってしまい、ORDER BY dにかなり時間がかかる(1.5秒とか)。
$zrv = 0.4;
$maxX = $centerX + $zrv;
$minX = $centerX - $zrv;
$maxY = $centerY + $zrv;
$minY = $centerY - $zrv;
地図全部をみないで、中心からある程度範囲で絞る補正を入れる。
ボストマップの場合、0.4で都内だと5000個、地方で300個くらいが対象になるようなので、とりあえず0.4にしてみた。5000個くらいであれば、0.1秒程なので、ストレスはなさそう。