在添加新标记和折线之前删除旧标记和折线 - Mapbox
Removing old markers and Polylines before adding new ones - Mapbox
鉴于 Mapbox 的以下代码,我正在绘制点和多个点之间的多段线。用户将选择不同的选择,其结果将替换地图上的图钉。然后将使用多段线以正确的顺序将这些引脚绘制在一起。
$.post('_posts/get-pins.php', {traveller: $(this).val()}, function(data){
var featureLayer = L.mapbox.featureLayer().addTo(map);
var featureCollection = {
"type": "FeatureCollection",
"features": []
};
var lineArray = [];
$.each(data, function (k, item) {
featureCollection.features.push({
"type": "Feature",
"properties": {
"id": item.id,
"title": item.title,
"description": item.description,
"image": item.image,
"marker-symbol": "star",
"marker-color": "#ff8888",
"marker-size": "large"
},
"geometry": {
"type": "Point",
"coordinates": [
item.long,
item.lat
]
}
});
lineArray[item.id] = [item.lat, item.long];
});
featureLayer.setGeoJSON(featureCollection);
lineArray = lineArray.filter(function(){return true});
var polyline = L.polyline(lineArray).addTo(map);
},'json');
所以我需要在绘制新的之前删除多段线和标记。我尝试了 map.removeLayer(xxx) 的多种组合,用正在创建的许多变量替换 xxx,但我设法做的就是删除标记。它只是保持多段线完好无损,只是堆叠多段线层。
在您用来更新它们的 method/function 之外声明 featureLayer 和折线的变量:
var featureLayer, polyline;
在函数中,检查变量 featureLayer 是否已经是 FeatureLayer 的实例然后清除它的图层,如果不是则创建新图层:
if (featureLayer instanceof L.mapbox.FeatureLayer) {
featureLayer.clearLayers();
} else {
featureLayer = L.mapbox.featureLayer().addTo(map);
}
对于折线,你必须以不同的方式来做,因为它没有清除所有添加点的功能,只需检查它是否是 L.Polyline 的实例,如果是,请使用L.Map 的 removeLayer 方法,然后定义一条新折线:
if (polyline instanceof L.Polyline) {
map.removeLayer(polyline);
}
polyline = L.polyline([]).addTo(map);
Plunker 上的工作示例:http://plnkr.co/edit/7nlgiA50NuPGsQOF0Fv4?p=preview
鉴于 Mapbox 的以下代码,我正在绘制点和多个点之间的多段线。用户将选择不同的选择,其结果将替换地图上的图钉。然后将使用多段线以正确的顺序将这些引脚绘制在一起。
$.post('_posts/get-pins.php', {traveller: $(this).val()}, function(data){
var featureLayer = L.mapbox.featureLayer().addTo(map);
var featureCollection = {
"type": "FeatureCollection",
"features": []
};
var lineArray = [];
$.each(data, function (k, item) {
featureCollection.features.push({
"type": "Feature",
"properties": {
"id": item.id,
"title": item.title,
"description": item.description,
"image": item.image,
"marker-symbol": "star",
"marker-color": "#ff8888",
"marker-size": "large"
},
"geometry": {
"type": "Point",
"coordinates": [
item.long,
item.lat
]
}
});
lineArray[item.id] = [item.lat, item.long];
});
featureLayer.setGeoJSON(featureCollection);
lineArray = lineArray.filter(function(){return true});
var polyline = L.polyline(lineArray).addTo(map);
},'json');
所以我需要在绘制新的之前删除多段线和标记。我尝试了 map.removeLayer(xxx) 的多种组合,用正在创建的许多变量替换 xxx,但我设法做的就是删除标记。它只是保持多段线完好无损,只是堆叠多段线层。
在您用来更新它们的 method/function 之外声明 featureLayer 和折线的变量:
var featureLayer, polyline;
在函数中,检查变量 featureLayer 是否已经是 FeatureLayer 的实例然后清除它的图层,如果不是则创建新图层:
if (featureLayer instanceof L.mapbox.FeatureLayer) {
featureLayer.clearLayers();
} else {
featureLayer = L.mapbox.featureLayer().addTo(map);
}
对于折线,你必须以不同的方式来做,因为它没有清除所有添加点的功能,只需检查它是否是 L.Polyline 的实例,如果是,请使用L.Map 的 removeLayer 方法,然后定义一条新折线:
if (polyline instanceof L.Polyline) {
map.removeLayer(polyline);
}
polyline = L.polyline([]).addTo(map);
Plunker 上的工作示例:http://plnkr.co/edit/7nlgiA50NuPGsQOF0Fv4?p=preview