使用 OpenLayers,删除标记层和弹出窗口的正确方法是啥?
Posted
技术标签:
【中文标题】使用 OpenLayers,删除标记层和弹出窗口的正确方法是啥?【英文标题】:With OpenLayers, what is the correct way of removing a markers layer, and the popups?使用 OpenLayers,删除标记层和弹出窗口的正确方法是什么? 【发布时间】:2011-05-04 17:52:17 【问题描述】:LoadPin 是一个向地图添加标记的函数。它在第一次调用时初始化层。 map 是一个 openlayers 地图对象。
但使用 map.removeLayer("markers") 或 "Markers",不会从地图中删除标记。我看到提到要执行此操作的销毁操作,但找不到。
还有,如何删除弹出窗口?
var markers = null
function LoadPin(LL, name, description)
var size = new OpenLayers.Size(36, 47);
var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
var icon = new OpenLayers.Icon('http://www.waze.co.il/images/home.png', size, offset);
if (markers == null)
markers = new OpenLayers.Layer.Markers("Markers");
map.addLayer(markers);
var marker = new OpenLayers.Marker(LL, icon)
markers.addMarker(marker);
var bounds = markers.getDataExtent();
map.zoomToExtent(bounds);
map.addPopup(new OpenLayers.Popup.FramedCloud("test", LL, null,
"<div style='font-family:Arial,sans-serif;font-size:0.8em;'>" + name + "<br>" + description + "</div>",
anchor = null, true, null));
【问题讨论】:
【参考方案1】:您可以使用以下方法从标记层中删除单个标记:
markers.removeMarker(marker);
移除整个层,用标记应该是这样实现的:
markers.destroy();
您应该能够通过以下方式删除弹出窗口:
map.removePopup(popup);
其中 popup 是之前创建的 Popup 对象。
【讨论】:
工作就像一个魅力!谢谢!【参考方案2】:我知道这篇文章很旧,但要从标记层列表中删除所有标记,请使用:
markerLayer.clearMarkers();
【讨论】:
我喜欢这种方法,但不确定 docs desc 的相关性:“此方法从图层中删除所有标记。标记不会被此函数破坏,而是从标记列表中删除。” @HaydenThring 如果没有其他对它们的引用,它们将被垃圾收集。【参考方案3】:尝试以下任何代码,希望对您有所帮助。
this.markerSource.removeFeature(this.iconFeature);
或
this.markerSource.removeFeature(iconFeature);
【讨论】:
以上是关于使用 OpenLayers,删除标记层和弹出窗口的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章