在Google Maps API v2中,如果我想删除所有 Map 标记,我可以简单地执行以下操作:
map.clearOverlays();
如何在Google Maps API _1623436中执行此操作?
看着Reference API,我不清楚 .
在Google Maps API v2中,如果我想删除所有 Map 标记,我可以简单地执行以下操作:
map.clearOverlays();
如何在Google Maps API _1623436中执行此操作?
看着Reference API,我不清楚 .
30 回答
你也可以这样做:
只需执行以下操作:
I.声明一个全局变量:
II . 定义一个功能:
要么
III . 在调用以下内容之前在'markerArray'中推送标记:
IV . 在需要的地方调用
clearOverlays();
或map.clearOverlays();
函数 .而已!!
同样的问题 . 此代码不再起作用 .
我已经纠正了它,用这种方式改变clearMarkers方法:
set_map(null)---> setMap(null)
文档已更新,包括有关该主题的详细信息:https://developers.google.com/maps/documentation/javascript/markers#remove
似乎V3中还没有这样的功能 .
人们建议在数组中保留对 Map 上所有标记的引用 . 然后当你想要删除em all时,只需循环遍历数组并在每个引用上调用.setMap(null)方法 .
See this question for more info/code.
我的版本:
代码是此代码的编辑版本http://www.lootogo.com/googlemapsapi3/markerPlugin.html我删除了手动调用addMarker的需要 .
优点
这样做可以使代码紧凑并保存在一个地方(不会污染命名空间) .
您不必再自己跟踪标记了,您可以通过调用map.getMarkers()始终在 Map 上找到所有标记
缺点
像我现在一样使用原型和包装器使我的代码依赖于Google代码,如果他们在源代码中进行市长更改,这将会破坏 .
如果你破坏了,你就不能修复它 . 很有可能他们会改变任何会打破这个的东西,但仍然......
如果手动删除一个标记,它的引用仍将在标记数组中 . (您可以编辑我的setMap方法来修复它,但代价是循环槽标记数组并删除引用)
这是最初由 YingYang Mar 11 '14 at 15:049 根据用户原始问题的原始回复发布的所有解决方案中最简单的
我在2.5年后使用谷歌 Map v3.18使用同样的解决方案,它就像一个魅力
我不认为V3中有一个,所以我使用了上面的自定义实现 .
免责声明:我没有写这段代码,但是当我把它合并到我的代码库中时,我忘了保留一个引用,所以我不知道它来自哪里 .
在新版本v3上,他们建议保留在数组中 . 如下 .
请参阅overlay-overview处的样本 .
谷歌的Demo Gallery有一个关于他们如何做到这一点的演示:
http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html
您可以查看源代码以查看它们如何添加标记 .
长话短说,他们将标记保存在全局数组中 . 清除/删除它们时,它们遍历数组并在给定的标记对象上调用“.setMap(null)” .
但是,这个例子显示了一个“技巧” . 此示例的“清除”意味着将它们从 Map 中删除但将它们保留在数组中,这允许应用程序快速将它们重新添加到 Map 中 . 从某种意义上说,这就像“隐藏”它们一样 .
“删除”也会清除数组 .
只在IE上工作 .
在chrome,firefox上工作,即......
解决方案非常简单 . 您可以使用以下方法:
marker.setMap(map);
. 在这里,您可以定义引脚将在哪个 Map 上显示 .因此,如果在此方法(
marker.setMap(null);
)中设置null
,则引脚将消失 .现在,您可以编写一个函数女巫,同时使您的 Map 中的所有标记消失 .
您只需添加将引脚放入数组中并使用
markers.push (your_new pin)
或此代码声明它们,例如:这是一个可以在 Map 中设置或消除数组中所有标记的函数:
要消除所有标记,您应该使用
null
调用该函数:并且,为了移除和消失所有标记,您应该重置您的标记数组,如下所示:
这是我的完整代码 . 这是我可以减少的最简单的 . Be care full 您可以使用关键的Google API替换代码中的
YOUR_API_KEY
:您也可以查阅google developer或完整文档,google developer web site .
rolinger的答案清晰易用 .
两个答案中发布的“
set_map
”功能似乎在Google Maps v3 API中不再有效 .我不知道发生了什么
Update:
Google似乎改变了他们的API那个“
set_map
" is not "setMap
” .http://code.google.com/apis/maps/documentation/v3/reference.html
以下来自Anon的工作非常完美,但在重复清除叠加层时会出现闪烁现象 .
只需执行以下操作:
I. Declare a global variable:
II. Define a function:
III. Push markers in the 'markerArray' before calling the following:
IV. Call the clearOverlays() function wherever required.
而已!!
希望能帮到你 .
我发现在google-maps-utility-library-v3项目中使用markermanager库是最简单的方法 .
1. Set up the MarkerManager
2. Add markers to the MarkerManager
3. To clear markers you just need to call the MarkerManger's clearMarkers() function
在这里,您可以找到如何删除标记的示例:
https://developers.google.com/maps/documentation/javascript/examples/marker-remove?hl=es
我刚刚尝试使用kmlLayer.setMap(null)并且它工作正常 . 不确定这是否适用于常规标记,但似乎可以正常工作 .
要清除所有叠加层,包括多边形,标记等...
只需使用:
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);}
这是我在 Map 应用程序中编写的一个函数:
要从 Map 中删除所有标记,请创建如下函数:
1.addMarker(location):此函数用于在 Map 上添加标记
2.clearMarkers():此函数从 Map 中删除所有标记,而不是从数组中删除
3.setMapOnAll(map):此函数用于在数组中添加标记信息
4.deleteMarkers():此函数通过删除对它们的引用来删除数组中的所有标记 .
这是谷歌自己在至少一个样本中使用的方法:
查看Google示例以获取完整的代码示例:
https://developers.google.com/maps/documentation/javascript/examples/places-searchbox
我不知道为什么,但是,使用
DirectionsRenderer
将setMap(null)
设置为我的标记't work for me when I' m .在我的情况下,我不得不拨打
setMap(null)
到我的DirectionsRenderer
.像这样的东西:
只需遍历标记并从 Map 中删除它们,之后是空 Map 标记数组:
只需清除Googlemap
我使用了一个能很好地完成工作的速记 . 做就是了
我已经尝试了所有提议的解决方案,但是当我的所有标记都在群集下时,没有任何对我有用 . 最后我只是说:
换句话说,如果您在群集中包裹标记并想要删除所有标记,则可以调用:
最干净的方法是迭代 Map 的所有功能 . 标记(以及多边形,折线等)存储在 Map 的data layer中 .
在通过drawing manager添加标记的情况下,最好创建一个全局标记数组或在创建时将标记推入数据层,如下所示:
我推荐第二种方法,因为它允许您稍后使用其他google.maps.data类方法 .
你的意思是删除,如隐藏或删除它们?
如果隐藏:
如果你想删除它们:
请注意,我使用数组标记来跟踪它们并手动重置它 .
您需要将map null设置为该标记 .
如果您使用gmap V3插件:
$("#map").gmap("removeAllMarkers");
见:http://www.smashinglabs.pl/gmap/documentation#after-load
我知道这可能是一个简单的解决方案,但这就是我所做的
每次都适合我 .
使用此功能,您可以从 Map 中删除所有标记 .
这会对你有所帮助,它对我有所帮助..