如何在空闲事件上绘制新的标记之前从谷歌地图中删除标记

时间:2011-05-31 08:22:07

标签: ajax google-maps jquery

我在平移或缩放后在谷歌地图上绘制标记 如果视口没有完全改变,而不是移动前出现的标记,并且在它们一次又一次地在它们上面绘制之后仍然应该出现。
我知道在绘制新标记之前我必须从地图中删除所有标记,我知道我应该使用marker.setMap(null);
我只是不知道如何以及在哪里适合我的代码。

google.maps.event.addListener(map, 'idle', showMarkers);

function showMarkers(){
    // get viewport bounds
    var southWestLat = map.getBounds().getSouthWest().lat();
    var southWestLng = map.getBounds().getSouthWest().lng();
    var northEastLat = map.getBounds().getNorthEast().lat();
    var northEastLng = map.getBounds().getNorthEast().lng();            

    var marker;

    $.ajax({
        type: "POST",
        url: "markers.php",
        dataType: "json",
        data: ({'southWestLat' : southWestLat , 'southWestLng' : southWestLng , 'northEastLat' : northEastLat , 'northEastLng' : northEastLng}),
        success: function(coordinatesMap){
            for (var id in coordinatesMap){
                if (coordinatesMap.hasOwnProperty(id)){                     
                    marker = new google.maps.Marker({
                        position: new google.maps.LatLng(coordinatesMap[id].lat,coordinatesMap[id].lng), 
                        map: map
                    });   
                }
            }
        }
    });         
}

1 个答案:

答案 0 :(得分:0)

对于性能推理,您不想清除所有标记;只有那些不再在地图上。这可以通过将标记存储在数组或对象中来实现。在“成功”上,您想要使用数组/对象检查标记是否已经在lat lng中。如果是,那么不要添加新的,如果没有,那么添加它。在ajax请求中处理完标记后,删除地图上不再可见的标记。