MySQL データベースから多くのマーカーを表示する Google マップ API を使用してマップを作成しようとしています。Google Maps API チュートリアル ( https://developers.google.com/maps/articles/phpsqlajax_v3?hl=de ) に書かれているように、ほぼすべてのことを行いました。
私の問題:
一度にすべてのマーカーをロードするのではなく、現在のビューの境界の間にあるマーカーのみをロードします。
そのために、私の「phpsqlajax_genxml.php」は、現在のビューの 4 つのエッジを GET 変数として取得します。それは問題なく動作しますが、javascript 部分の処理方法がわかりません。
私の最初の試みは、境界が変更されたときにマップを更新するハンドラーを挿入することでした:
google.maps.event.addListener(map, 'bounds_changed', function() {
var bounds = map.getBounds();
var swPoint = bounds.getSouthWest();
var nePoint = bounds.getNorthEast();
var swLat = swPoint.lat();
var swLng = swPoint.lng();
var neLat = nePoint.lat();
var neLng = nePoint.lng();
var qs = '&swLat=' + swLat + '&swLng=' + swLng + '&neLat=' + neLat + '&neLng=' + neLng;
downloadUrl("./includes/phpsqlajax_genxml.php?sess=<?php print session_id();
?>"+qs,function(data){
var xml = data.responseXML;
var markers = xml.documentElement.getElementsByTagName("marker");
for (var i = 0; i < markers.length; i++) {
var name = markers[i].getAttribute("name");
var address = markers[i].getAttribute("address");
var type = markers[i].getAttribute("type");
var point = new google.maps.LatLng(
parseFloat(markers[i].getAttribute("lat")),
parseFloat(markers[i].getAttribute("lng")));
var html = "<b>" + name + "</b> <br/>" + address;
var icon = customIcons[type] || {};
var marker = new google.maps.Marker({
map: map,
position: point,
icon: icon.icon,
shadow: icon.shadow
});
bindInfoWindow(marker, map, infoWindow, html);
}
});
しかし、マップをスクロールしている間、ミリ秒ごとにマップが更新されます。毎秒だけ更新するにはどうすればよいですか?
主な問題は、新しいキャッシュのみをマップに挿入し、ビューの外にあるものを削除する方法です。どうすればいいのかわかりません。
これまでのところ、「DownloadUrl」関数はその領域のすべてのキャッシュをミリ秒ごとにダウンロードし、既にダウンロードしたものもダウンロードするため、すべてのマーカーが千回表示される可能性があります。
誰か助けてくれませんか?:)