在Leaflet中,我使用变量在GeoJSON的过滤器中插入条件,如下所示:
var stareInt = "start";
var elements;
var geojsonStyle = {
radius: 6,
fillColor: "#6bad9f",
color: "#FFF",
className: 'point',
pane: "pointPanel",
weight: 1,
opacity: 0.9,
fillOpacity: 0.8
};
elements = L.geoJSON(elem_build, {
pointToLayer: function (feature, latlng) {
return new L.circleMarker(latlng, geojsonStyle, {
}).on('click', function() {
this.bindPopup(feature.properties.grad_int).openPopup();
});
},
filter: function(feature, layer) {
if (stareInt == "01") {
return (feature.properties.grad_int == "very good");
}
else if (stareInt == "02") {
return (feature.properties.grad_int == "good");
}
else {
return feature.properties.grad_int == "bad";
}
},
onEachFeature: onEachFeature
}).addTo(map);
通过单击按钮激活过滤器,如下所示:
$("#buttonA").click(function() {
map.removeLayer(elements);
stareInt= "01";
map.addLayer(elements);
});
但我发现只返回了最后一个状态(在这种情况下,'坏')。
我想我必须重新应用过滤器或类似的东西,因为Leaflet不记得它。
如何让过滤器按钮起作用?
答案 0 :(得分:2)
请注意,String[] fields = Stream.of(string.split("[+()*]"))
.filter(s -> !s.isEmpty())
.toArray(String[]::new);
回调函数在实例化filter
时运行一次。当图层(重新)添加到地图时,传单不重新应用L.GeoJson
上的过滤器。这是设计的。您可以通过查看the source code for L.GeoJson
来查看此内容。
一种方法是有三个不同的L.GeoJson
实例,每个实例都应用了不同的过滤器:
L.GeoJson
然后,您可以使用外部按钮切换内容:
var elements_verygood = L.geoJson(elem_build, {
filter: function(feat) { return feat.properties.grad_int == "very good"); }
});
var elements_good = L.geoJson(elem_build, {
filter: function(feat) { return feat.properties.grad_int == "good"); }
});
var elements_bad = L.geoJson(elem_build, {
filter: function(feat) { return feat.properties.grad_int == "bad"); }
});
但这也是使用document.getElementById("buttonA").addEventListener('click', function() {
map.removeLayer(elements_good);
map.removeLayer(elements_bad);
map.addLayer(elements_verygood);
});
:
L.Control.Layers