Google Maps Api 3仅删除所选标记

MrG*_*rki 22 selected google-maps-api-3 marker

我有2个功能如下:

function addMarker() {
    marker = new google.maps.Marker({
        position: Gpoint,
        map: map,
        draggable: true,
        animation: google.maps.Animation.DROP
    });
    map.panTo(Gpoint);

    google.maps.event.addListener(marker, "rightclick", 
    function (point) { 
    showContextMarker(point.latLng); } ); 
    $('.contextmenu').remove();
};

function delMarker() { marker.setMap(null); $('.contextmenu').remove(); };
Run Code Online (Sandbox Code Playgroud)

因此,我可以理解,我有一个上下文菜单,上面有"删除标记"选项.我在添加标记时绑定了一个"rightclick"监听器,以显示此菜单.

到目前为止,一切都没有任何问题.

但是当我尝试点击要删除的标记时; 它只影响最后添加的标记.当我再试一次; 什么都没发生.

所以我的想法是获取点击标记的id(或可能有用的东西)并根据此运行此删除功能.

简单地说,我想从具有多个标记的地图中删除我点击的标记.

你有什么方法可以解决这个问题吗?

提前致谢!

解决了!

这是解决方案.谢谢Fatih.没有你的指导,这是不可能的:

var id;
var markers = {};
var addMarker = function () {
    marker = new google.maps.Marker({ 
        position: Gpoint,
        map: map,
        draggable: true,
        animation: google.maps.Animation.DROP
    });
    map.panTo(Gpoint);
    id = marker.__gm_id
    markers[id] = marker; 

    google.maps.event.addListener(marker, "rightclick", function (point) { id = this.__gm_id; delMarker(id) });
}

var delMarker = function (id) {
    marker = markers[id]; 
    marker.setMap(null);
}
Run Code Online (Sandbox Code Playgroud)

通过以下方式调用删除功能:delMarker(id) Ps:"在这种情况下右键单击就足够了"

谢谢!

Fat*_*cet 43

关于jsFiddle的工作示例


Google地图无法管理您的标记.所以你的所有标记都应由你自己管理.

创建一个全局标记对象并将所有标记推送到此对象.并且在获取标记实例时为每个标记赋予唯一ID.然后当你想删除一个标记时,取其id并在全局标记对象中找到该标记,最后通过传递null参数调用该标记实例的setMap方法.

我还添加了一个适用于jsFiddle的演示.代码记录很多.

你的psuedo代码应该是这样的.有关更详细的代码,请查看演示.

var currentId = 0;
var uniqueId = function() {
    return ++currentId;
}

var markers = {};
var createMarker = function() {
    var id = uniqueId(); // get new id
    var marker = new google.maps.Marker({ // create a marker and set id
        id: id,
        position: Gpoint,
        map: map,
        draggable: true,
        animation: google.maps.Animation.DROP
    });
    markers[id] = marker; // cache created marker to markers object with id as its key
    return marker;
}
var deleteMarker = function(id) {
    var marker = markers[id]; // find the marker by given id
    marker.setMap(null);
}