如何删除以下热图中的现有标记并添加新集?
How to remove the existing markers in the following Heatmap and add a new set?
现有标记 (有效) 已使用类似经度和纬度集的 N 块分配给地图:
m = [42.0167, 24.8667];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
其中m
、marker
和markers
是全局变量。
现在,我想清除 地图上的现有标记,并在 replaceWithNewMarkers(data)
出现后立即放置新的 ajax 数据数组执行:
function replaceWithNewMarkers(data) {
var obj = jQuery.parseJSON( data );
//markers.clearLayers(); // #this clears all the markers
//markers = L.markerClusterGroup();
// THE FOLLOWING IS ABLE TO ADD NEW MARKERS TO EXISTING MAP
$.each(obj, function(myVal) {
m = [obj[myVal][0], obj[myVal][1]];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
});
}
这适用于添加 新标记,但我无法删除 现有标记。我尝试添加 markers.clearLayers();
来清除标记,但这样做会完全隐藏标记(不可能显示新的标记集)。
关于如何实现这一点有什么建议吗?
-------- 添加详细信息 --------
以下是当前正在加载默认标记的初始化程序。
<script>
var m;
var marker;
var markers;
var map;
var tiles;
var latlng;
var baseLayer;
window.onload = function() {
tiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors, Points © 2012 LINZ'
});
latlng = L.latLng(25, -80);
map = new L.Map('map-canvas', {
center: latlng,
zoom: 2,
minZoom: 2,
maxBounds: L.latLngBounds(L.latLng(85,-120), L.latLng(-85, 120)),
layers: [tiles]
});
markers = L.markerClusterGroup();
m = [40.27, 25.87];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
m = [37.455, 20.94];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
m = [57.25, 61.0];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
map.addLayer(markers);
};
baseLayer = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>',
maxZoom: 18
}
);
</script>
使用"map.removeLayer(markers)"移除图层
function resetMarkers() {
if (map.hasLayer(markers)) {
map.removeLayer(markers);
markers= new L.markerClusterGroup();
map.addLayer(markers);
}
}
function replaceWithNewMarkers(data) {
var obj = jQuery.parseJSON( data );
resetMarkers();
// THE FOLLOWING IS ABLE TO ADD NEW MARKERS TO EXISTING MAP
$.each(obj, function(myVal) {
m = [obj[myVal][0], obj[myVal][1]];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
});
}
// 编辑:将标记层重命名为标记
// 编辑 2:newMarkerClusterGroup => L.markerClusterGroup();
现有标记 (有效) 已使用类似经度和纬度集的 N 块分配给地图:
m = [42.0167, 24.8667];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
其中m
、marker
和markers
是全局变量。
现在,我想清除 地图上的现有标记,并在 replaceWithNewMarkers(data)
出现后立即放置新的 ajax 数据数组执行:
function replaceWithNewMarkers(data) {
var obj = jQuery.parseJSON( data );
//markers.clearLayers(); // #this clears all the markers
//markers = L.markerClusterGroup();
// THE FOLLOWING IS ABLE TO ADD NEW MARKERS TO EXISTING MAP
$.each(obj, function(myVal) {
m = [obj[myVal][0], obj[myVal][1]];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
});
}
这适用于添加 新标记,但我无法删除 现有标记。我尝试添加 markers.clearLayers();
来清除标记,但这样做会完全隐藏标记(不可能显示新的标记集)。
关于如何实现这一点有什么建议吗?
-------- 添加详细信息 --------
以下是当前正在加载默认标记的初始化程序。
<script>
var m;
var marker;
var markers;
var map;
var tiles;
var latlng;
var baseLayer;
window.onload = function() {
tiles = L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
maxZoom: 18,
attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> contributors, Points © 2012 LINZ'
});
latlng = L.latLng(25, -80);
map = new L.Map('map-canvas', {
center: latlng,
zoom: 2,
minZoom: 2,
maxBounds: L.latLngBounds(L.latLng(85,-120), L.latLng(-85, 120)),
layers: [tiles]
});
markers = L.markerClusterGroup();
m = [40.27, 25.87];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
m = [37.455, 20.94];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
m = [57.25, 61.0];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
map.addLayer(markers);
};
baseLayer = L.tileLayer(
'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',{
attribution: 'Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>',
maxZoom: 18
}
);
</script>
使用"map.removeLayer(markers)"移除图层
function resetMarkers() {
if (map.hasLayer(markers)) {
map.removeLayer(markers);
markers= new L.markerClusterGroup();
map.addLayer(markers);
}
}
function replaceWithNewMarkers(data) {
var obj = jQuery.parseJSON( data );
resetMarkers();
// THE FOLLOWING IS ABLE TO ADD NEW MARKERS TO EXISTING MAP
$.each(obj, function(myVal) {
m = [obj[myVal][0], obj[myVal][1]];
marker = L.marker([m[0], m[1]]);
markers.addLayer(marker);
});
}
// 编辑:将标记层重命名为标记 // 编辑 2:newMarkerClusterGroup => L.markerClusterGroup();