我试图在地图上渲染5组数据,一次一个,可由用户选择。
我正在使用图层来存储每一组,我可以在它们之间切换 - 效果很好。
我希望能够根据用户输入过滤每个集合。我正在使用L.layerGroup
但尝试在加载时将数据重新格式化为GeoJSON,因此我可以使用内置过滤器功能。只有当我删除图层并重新添加每个标记时,这似乎才有效。
此处示例:http://jsfiddle.net/callum/5sunB/
对于1000点,我的系统需要大约200毫秒,这太慢了。
有没有办法只显示/隐藏基于过滤函数的图层中已有的标记?
感谢。
答案 0 :(得分:4)
不是真的。您可以保存标记,然后将它们添加到地图的速度比重新创建它们然后添加它们更快。
例如,
var markers = new Array();
...
// create a marker using some unique id and save it to the markers array
var i = feature.properties.id;
markers[i] = L.circleMarker(latlng, {
....
});
return markers[i];
然后当你过滤(点击或其他事件)时,清除标记图层并重新添加匹配的(已保存的)标记:
if (map.hasLayer(marker_layer)) {
map.removeLayer(marker_layer);
}
marker_layer = new L.featureGroup();
// filter criteria here
for (var i = 0; i < src_data.features.length; i++) {
var feature = src_data.features[i];
if (feature.properties.hits >= n1 && feature.properties.hits <= n2) {
marker_layer.addLayer(markers[i]);
}
}
marker_layer.addTo(map);
我在这里更新了您的JSFiddle:http://jsfiddle.net/5sunB/5/因此您可以比较重新创建过滤后的标记与仅重新添加它们。