バウンディング ボックスとズーム レベルの両方に基づいてマーカーをロードおよび破棄するマップを作成しています。マーカーを適切に削除するのに本当に問題があります。特定の状況ではうまくいくようです。
マーカー情報を含むオブジェクトがあり、これにはGoogleマップマーカーオブジェクトも含まれています。私のコードは、境界ボックスまたはズームレベルに基づいて市場を削除する必要があるかどうかを検出します。マーカー オブジェクトを「setMap(null);」に設定します。そしてfirebugを使用すると、設定されていることがわかります。次に、親オブジェクトを完全に削除すると、オブジェクトのデータ長が適切に更新されます。
マーカーが削除されたと思われるときにfirebugコンソールに出力し、動作しているようで、バウンディングボックスの変更に関するマーカーのajax呼び出しからマーカーが再作成されていないことがわかります。
それでも、マップをズームすると、マーカーが削除されていることが時々わかります。ズームアウトしてから、マウスを押したままパンバックします。または、最初にズームアウトするとマーカーがすべて削除されることがありますが、もう一度ズームインしてから元に戻すと、マーカーは削除されません。
コードのロジックで何か間違ったことをしているに違いありません。困惑しています。
http://www.trailforks.com/map/test.php?lat=49.352247&lon=-123.202413のソースを表示できます 。JS は http://www.trailforks.com/map/includes/map.jsです。
マーカーを削除するためのコードは下部にあります
function clearMarkerMemory(mapItem, i) {
google.maps.event.removeListener(mapItem.lis); // remove stored listener
mapper.data[i].obj.setMap(null); // remove marker
mapper.data.splice(i, 1);
console.log("removed marker "+mapItem.icon+":"+mapItem.nid+' '+mapItem.name);
};
コンソールにさらにデバッグを追加し、2 つのマーカーしかないマップの単純な領域に移動しました
作成されたマーカーを確認できます。マップを少し移動すると、マーカー オブジェクトで検出されたため、マーカーが再作成されていないことがわかります。次に、マーカーの 1 つが画面の外に出るようにビューポートを移動します。マーカーが削除され、マーカー オブジェクトの長さが更新されていることがわかります。しかし、地図をパンしてマーカーの上に戻すと、地図上に残ります。