LeafletJS中的动态可见性图层标记

时间:2014-03-14 03:59:12

标签: leaflet

我试图在地图上渲染5组数据,一次一个,可由用户选择。

我正在使用图层来存储每一组,我可以在它们之间切换 - 效果很好。

我希望能够根据用户输入过滤每个集合。我正在使用L.layerGroup但尝试在加载时将数据重新格式化为GeoJSON,因此我可以使用内置过滤器功能。只有当我删除图层并重新添加每个标记时,这似乎才有效。

此处示例:http://jsfiddle.net/callum/5sunB/

对于1000点,我的系统需要大约200毫秒,这太慢了。

有没有办法只显示/隐藏基于过滤函数的图层中已有的标记?

感谢。

1 个答案:

答案 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/因此您可以比较重新创建过滤后的标记与仅重新添加它们。