从Google Maps API V3中删除标记

时间:2013-12-18 07:58:35

标签: javascript google-maps google-maps-api-3

我有一张地图,我想通过复选框添加标记(带信息窗口)。它也工作得很好,但是当我取消选中复选框时,我无法再将其删除。有人可以帮忙吗?

另见:http://jsfiddle.net/x8D7y/

function clearOverlays() {
    google.maps.event.clearListeners(marker300, 'click');
}

function showOverlays() {
    var marker300 = new google.maps.Marker({
        position: new google.maps.LatLng(45.0, 1.0),
        map: map /*,
        icon: 'img/bike5.png' */
    });

    var infowindow300 = new google.maps.InfoWindow({
        content: '<div style="width: 200px;">Test 300 - <a href="http://www.google.com" target="_blank">Link</a></div>'
    });

    google.maps.event.addListener(marker300, 'click', function() {
        infowindow300.open(map, marker300);
    });
}

4 个答案:

答案 0 :(得分:1)

您必须使用外部数组,该数组包含您在地图中使用的额外标记。在您的情况下,我添加了以下数组:

var extraMarkers = [];

然后,当我点击该复选框时,我将获得该复选框的ID,并将其作为函数参数发送到showOverlays()clearOverlays()

然后,在showOverlays()中,我使用复选框ID作为extraMarkers键,将标记作为值。

最后,在clearOverlays()我再次使用复选框ID从extraMarkers数组中获取带有此ID的元素,然后我将地图显示为null,以便删除标记

请参见此处的工作示例:http://jsfiddle.net/x8D7y/1/

以下是您要求的完整代码:

var map;
var extraMarkers = [];
var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(45.0, 1.0)
};

map = new google.maps.Map($('#map')[0], myOptions);

var marker1 = new google.maps.Marker(
    {
        position: new google.maps.LatLng(45.5, 1.5),
        map: map /*,
        icon: 'img/bike5.png' */
    }
);

var infowindow1 = new google.maps.InfoWindow(
    {
        content: '<div style="width: 200px;">Test 1 - <a href="http://www.google.com" target="_blank">Link</a></div>'
    }
);

google.maps.event.addListener(
    marker1, 
    'click', 
    function()
    {
        infowindow1.open(map, marker1);
    }
);

function clearOverlays(myID)
{
    google.maps.event.clearListeners(extraMarkers[myID], 'click');
    extraMarkers[myID].setMap(null);
}

function showOverlays(myID)
{
    var marker300 = new google.maps.Marker(
        {
            position: new google.maps.LatLng(45.0, 1.0),
            map: map /*,
            icon: 'img/bike5.png' */
        }
    );

    extraMarkers[myID] = marker300;

    var infowindow300 = new google.maps.InfoWindow(
        {
            content: '<div style="width: 200px;">Test 300 - <a href="http://www.google.com" target="_blank">Link</a></div>'
        }
    );

    google.maps.event.addListener(
        marker300, 
        'click', 
        function()
        {
            infowindow300.open(map, marker300);
        }
    );
}

$('#mapall').change(
    function()
    {
        var myID = $(this).attr('id');

        if($('#mapall').attr('checked'))
        {
            showOverlays(myID);
        }
        else
        {
            clearOverlays(myID);
        }
    }
);

答案 1 :(得分:0)

if you have single marker on map then use marker.setMap(null);
if Multiple marker make an array for marker
 markersArray.push(marker);
 if (markersArray) {
     for (i in markersArray) { 
             markersArray[i].setMap(null); 
        }
}

答案 2 :(得分:0)

试试这个:

marker300.setMap(null);

答案 3 :(得分:0)

您的标记在showOverlays()函数之外不可见。控制台中报告错误:

Uncaught ReferenceError: marker300 is not defined

最小变化是将marker300定义为全局:

var map;
var marker300; 

并删除

中的标记
function clearOverlays() {
    google.maps.event.clearListeners(marker300, 'click');
    marker300.setMap(null);
}

并删除函数var

中变量marker300前面的showOverlays()

请参阅example in fiddle

如果您想拥有多个标记,则必须遵循用户 Merianos Nikos的解决方案