広域で地図を表示した時の、マーカーのパース

ブログ | 2008/4/10 18:41
mysqlのスロークエリーログを見ていたら、マーカーのパースでいくつか。

ベースのクエリーは概ねこんな感じ
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秒程なので、ストレスはなさそう。

縮小 拡大

ログインしておくと、後で編集が可能です。

Rottel内コンテンツ

ユーザー一覧

Rottelとは?
利用規約
開発飲料
利用者の声
ヘルプ
close