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

Mapbox JS markers not being removed using .removeLayer()

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

我在这里查看了其他 questions/answers,但到目前为止,其中 none 都有效;标记只是不断添加而不被删除。

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' 方法只是从您的地图实例中删除图层并保持其完整,以便您稍后可以重新添加它。您需要调用 L.mapbox.FeatureLayer 的 clearLayers(),这将从图层中删除所有添加的功能:

featureLayer.clearLayers();

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

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

}

希望对您有所帮助