23

我有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(); };

因此,据了解,我有一个上下文菜单,上面有“删除标记”选项。我在添加标记期间绑定了一个“右键单击”侦听器,以显示此菜单。

到目前为止,一切都在正常工作。

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

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

简要地; 我想从具有多个标记的地图中删除我单击的标记。

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

提前致谢!

解决了!

这是解决方案。谢谢法提赫。没有您的指导是不可能的:

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);
}

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

谢谢!

4

6 回答 6

49

jsFiddle 上的工作示例


Google 地图不管理您的标记。所以你所有的标记都应该由你自己管理。

制作一个全局标记对象并将所有标记推送到该对象。并在获取标记实例时为每个标记提供唯一的 id。然后当你想删除一个标记时,获取它的 id 并在全局标记对象中找到这个标记,最后调用这个标记实例的 setMap 方法并传递 null 参数。

我还添加了一个适用于 jsFiddle 的演示。代码有大量文档。

你的伪代码应该是这样的。更详细的代码请看demo。

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

变量标记 = {};
var createMarker = 函数() {
    var id = uniqueId(); // 获取新的id
    var marker = new google.maps.Marker({ // 创建一个标记并设置 id
        身份证:身份证,
        位置:G点,
        地图:地图,
        可拖动:真,
        动画:google.maps.Animation.DROP
    });
    标记[id] = 标记;// 将创建的标记缓存到以 id 为键的标记对象
    返回标记;
}
var deleteMarker = 函数(id){
    var 标记 = 标记[id]; // 根据给定的 id 找到标记
    标记.setMap(null);
}
于 2011-12-15T14:49:57.723 回答
2

作为@Fatih 答案的补充,您应该管理标记。例如,您可以在数组中添加每个标记,然后删除,您可以在数组中找到此标记并将地图中的 val 设置为 null。

于 2011-12-15T14:55:07.700 回答
2

只需在右键单击功能中传递您的标记。例如:

var marker = new google.maps.Marker({
    position: event.latLng,
    map: map,
    draggable: true,
    title: 'Hello World!'
});
google.maps.event.addListener(marker, "rightclick", function (point) {delMarker(marker)});

并使函数看起来像这样:

var delMarker = function (markerPar) {
    markerPar.setMap(null);
}

您的标记将在右键单击时移除。

于 2016-11-01T15:09:25.767 回答
1

这对我有用:

第二个 currentId,如果你有更好的主意,请告诉我

var actualMarkerId = 0;
var currentId = 0;



    if (actualMarkerId>0) {
        deleteMarker(actualMarkerId);
        console.log(actualMarkerId);
    }
    var id = uniqueId(); // get new id
    actualMarkerId = id;
于 2013-08-24T15:16:53.707 回答
0

为了最小的变化

var newid=0;

for (var index in results){

var marker = new google.maps.Marker({

map: map,
icon: image,

__gm_id: = newid+1,

});
}

现在 marker['__gm_id'] 仍然有一个值

于 2014-07-23T15:34:45.250 回答
0

简单,使用全局数组作为标记对象。在绘图标记上推动该数组中的标记对象。是的,我们可以在 Marker Object 中使用 Id 进行唯一引用。

代码如下

标记数组 = []

marker = new google.maps.Marker({
         Id: 1,
         position: new google.maps.LatLng(Lat,Long),
         type: 'info'         
          });

MarkerArray.push(marker);

要删除特定标记,请使用每个标记的唯一 ID 查找该元素索引。

var MarkerIndex = MarkerArray.findIndex(function GetIndex(element) {
            return element.Id == 1;
});    
MarkerArray[MarkerIndex].setMap(null);
MarkerArray.splice(MarkerIndex, 1); // to remove element from global array
于 2019-07-04T09:56:11.477 回答