Google maps api 3 谷歌地图Api 3仅删除选定标记

Google maps api 3 谷歌地图Api 3仅删除选定标记,google-maps-api-3,selected,marker,Google Maps Api 3,Selected,Marker,我有两个函数,如下所示: 函数addMarker(){ marker=新的google.maps.marker({ 职位:Gpoint,, 地图:地图, 真的, 动画:google.maps.animation.DROP }); panTo地图(Gpoint); google.maps.event.addListener(标记“右键单击”, 函数(点){ showContextMarker(point.latLng);}); $('.contextmenu').remove(); }; 函数de

我有两个函数,如下所示:

函数addMarker(){
marker=新的google.maps.marker({
职位:Gpoint,,
地图:地图,
真的,
动画:google.maps.animation.DROP
});
panTo地图(Gpoint);
google.maps.event.addListener(标记“右键单击”,
函数(点){
showContextMarker(point.latLng);});
$('.contextmenu').remove();
};
函数delMarker(){marker.setMap(null);$('.contextmenu').remove();};
所以,正如我所理解的,我有一个上下文菜单,上面有“删除标记”选项。 我在添加标记时绑定了一个“右键单击”侦听器,以显示此菜单

到目前为止,一切都在顺利进行

但当我试图点击一个标记删除;它只影响最后添加的标记。 当我再次尝试时;什么也没发生

因此,我的想法是获取点击标记的id(或者一些可能有用的东西),并根据此操作运行此删除功能

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

你有办法解决这个问题吗

提前谢谢

解决了

这是解决办法。谢谢你,法提赫。没有你的指导是不可能的:

var-id;
var标记={};
var addMarker=函数(){
marker=新的google.maps.marker({
职位:Gpoint,,
地图:地图,
真的,
动画:google.maps.animation.DROP
});
panTo地图(Gpoint);
id=标记器。\u gm\u id
标记器[id]=标记器;
google.maps.event.addListener(标记,“右键单击”,函数(点){id=this.\ugm\uid;delMarker(id)});
}
var delMarker=函数(id){
标记=标记[id];
marker.setMap(空);
}
通过以下方式调用删除函数:
delMarker(id)
Ps:“在这个案例上单击鼠标右键就足够了”

谢谢大家!


谷歌地图不会管理你的标记。所以你所有的标记都应该由你自己管理

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

此外,我还添加了一个在JSFIDLE上工作的演示。代码有大量的文档记录

你的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); } var-currentId=0; var uniqueId=函数(){ 返回++当前ID; } var标记={}; var createMarker=函数(){ var id=uniqueId();//获取新id var marker=new google.maps.marker({//创建一个标记并设置id id:id, 职位:Gpoint,, 地图:地图, 真的, 动画:google.maps.animation.DROP }); markers[id]=marker;//将创建的标记缓存到以id为键的markers对象 返回标记; } var deleteMarker=函数(id){ var marker=markers[id];//根据给定的id查找标记 marker.setMap(空); }
作为@Fatih答案的补充,您应该管理标记。例如,您可以在数组中添加每个标记,然后要删除,您可以在数组中找到该标记,并将映射中的val设置为null

这对我很有用:

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

var actualMarkerId = 0;
var currentId = 0;



    if (actualMarkerId>0) {
        deleteMarker(actualMarkerId);
        console.log(actualMarkerId);
    }
    var id = uniqueId(); // get new id
    actualMarkerId = id;
对于最小的更改

var newid=0;

for (var index in results){

var marker = new google.maps.Marker({

map: map,
icon: image,

__gm_id: = newid+1,

});
}

现在标记['''u gm'u id']仍然有一个值

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

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

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

简单,使用标记对象的全局数组。 在打印标记上按该阵列中的标记对象。 是的,我们可以在标记对象中使用Id进行唯一引用

代码如下

MarkerArray=[]

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

但是你想要实现什么呢???。删除所有标记?仅删除单击的标记@Gorki先生,你是如何生成“gmu id”的?它是递增的吗?@jemz它是由谷歌地图api本身给出的。这是一个自动生成的数字。但您可以生成自己的id,如guid或索引号等,并将其用作标记id,以确保u gm_id不再是从标记返回的值。。。需要在头部生成一个随机的,我也这么认为,但不知道如何生成。如何通过单击地图与数组进行比较来获取实例的id?“marker.\u gm\u id”似乎是id,但如何跟踪它?通过getElementbyId还是其他什么?任何帮助都将不胜感激!首先,我不应该让您使用数组,因为当您使用数组时,必须在数组中搜索标记。当使用对象而不是数组时,不需要这样做。第二个是,当右键单击标记时,可以获取标记的id属性,我想您知道单击了哪个标记。如果你知道它,那么就用.id来获取它。如果你不知道如何实现这一目标。所以逻辑是这样的。我得到了逻辑,它看起来很不错,但是我怎么才能找到你通过点击定义的id呢?变量标记=标记[id];//根据给定的id查找标记。请原谅,但我不理解为什么我们分配了另一个id。即使我们分配了;我们如何从标记中找到这个id?我真的很抱歉:(检查工作样品。我刚刚选择使用lat+'''.'+lng作为标记。