gpt4 book ai didi

javascript - 未使用 .removeLayer() 删除 Mapbox JS 标记

转载 作者:行者123 更新时间:2023-11-30 17:00:54 25 4
gpt4 key购买 nike

我有一个函数可以使用 mapbox javascript 库成功地将标记添加到 map 。但是,我希望该函数在添加两个新标记之前清除 map 中的所有标记,以便一次只显示两个标记。

我在这里查看了其他问题/答案,但到目前为止都没有用;标记只是不断添加而不被删除。

var map = L.mapbox.map(...);

function updateMarkers(d) {
var featureLayer = L.mapbox.featureLayer();
map.removeLayer(featureLayer);
getCoordX = d.stn_f_c;
getCoordX = getCoordX.split(",");
getCoordY = d.stn_t_c;
getCoordY = getCoordY.split(",");
featureLayer = L.marker([getCoordX[0],getCoordX[1]], {
icon: L.mapbox.marker.icon({
'marker-size': 'large',
'marker-symbol': 'bicycle',
'marker-color': '#66CD00'
})
}).addTo(map);
featureLayer += L.marker([getCoordY[0],getCoordY[1]], {
icon: L.mapbox.marker.icon({
'marker-size': 'large',
'marker-symbol': 'bicycle',
'marker-color': '#FF6666'
})
}).addTo(map);
}

提前感谢您的帮助。

最佳答案

'removeLayer' 方法只是从您的 map 实例中删除图层并保持其完好无损,以便您稍后可以重新添加它。您需要调用 L.mapbox.FeatureLayer 的 clearLayers(),这将从图层中删除所有添加的功能:

featureLayer.clearLayers();

此外,您还用 L.Marker 实例覆盖了包含层实例的引用 featureLayer:

featureLayer = L.marker(...);

您在 featureLayer 引用(现在包含对第一个标记的引用)上使用 += 赋值运算符的下一个标记将不起作用。它用于添加值,而不是对象实例:

featureLayer += L.marker(...);

将单个图层(标记、多边形等)添加到featureLayer有两种方式,使用featureLayer的addLayer方法,或者使用addTo方法您尝试添加的对象:

featureLayer.addLayer(marker);
// or
marker.addTo(featureLayer);

您正在做的另一件奇怪的事情是添加坐标。您将字符串值拆分为一个数组:

getCoordX = d.stn_f_c;
getCoordX = getCoordX.split(",");

现在(我假设)你有一个包含两个值的数组,然后你分别使用它们并再次创建一个数组:

L.marker([getCoordX[0],getCoordX[1]])

你可以跳过它,直接做:

L.marker(getCoordX)

其实是一样的。我已经清理了您的代码,但无法对其进行测试,所以如果我犯了徒手错误,请原谅我:

var map = L.mapbox.map(...);

// Create empty layer
var featureLayer = L.mapbox.featureLayer().addTo(map);

function updateMarkers (d) {

// Clear layer
featureLayer.clearLayers();

// Splitting the value and adding it in one go
L.marker(d.stn_f_c.split(","), {
icon: L.mapbox.marker.icon({
'marker-size': 'large',
'marker-symbol': 'bicycle',
'marker-color': '#66CD00'
})
}).addTo(featureLayer); // Add to the featureLayer

L.marker(d.stn_t_c.split(","), {
icon: L.mapbox.marker.icon({
'marker-size': 'large',
'marker-symbol': 'bicycle',
'marker-color': '#FF6666'
})
}).addTo(featureLayer);

}

希望对你有帮助

关于javascript - 未使用 .removeLayer() 删除 Mapbox JS 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28886382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com