这只是我的代码片段:
function removeFilter(a){
if (a === "100-Year Rainfall"){
bldg100yearCBR.filter = null;
bldg100yearCBR.refresh({
force: true
});
}
...
以上是我删除WFS矢量图层过滤器的功能。如果我不想添加另一个图层,它就有效。我想知道为什么?这是我添加图层的方式:
bldg100yearCBR = new OpenLayers.Layer.Vector("100-Year Rainfall Affected Buildings", {
strategies: [new OpenLayers.Strategy.Fixed()],
eventListeners: {
'loadend': function (evt) {
map.zoomToExtent(bldg100yearCBR.getDataExtent());
//map.getExtent().containsBounds(bldg100yearCBR, true);
$("#load_table").removeAttr("disabled", "disabled");
$("#load_table").val("Go");
$("#locateMe").hide();
},
'loadstart': function (evt) {
$("#load_table").attr("disabled", "disabled");
$("#load_table").val("Loading...");
$("#locateMe").show();
}
},
projection: new OpenLayers.Projection("EPSG:4326"),
protocol: new OpenLayers.Protocol.WFS({
version: "1.1.0",
url: a,
featureType: "bldg_100yr",
featureNS: b,
geometryName: "geom"
}),
renderers: renderer,
styleMap: new OpenLayers.StyleMap(style),
displayInLayerSwitcher: !0
});
var selFloodEvent = $('#affectedLayer').val();
var layerName = map.getLayersByName(selFloodEvent);
var len = layerName.length;
if (len < 1){
map.addLayer(bldg100yearCBR);
activateControls(c);
}else{
removeFilter("100-Year Rainfall");
layerName[0].setVisibility(true);
console.log("reset me");
}
myflag1 = true;
toggleStatic1("100-Year Rainfall Affected Buildings");
添加/加载另一个矢量图层后,过滤器无法正常工作。方案是如果图层已经加载,我想显示它而不再添加它,但如果之前已经过滤,我想重置它。这就是问题,removeFilter
功能在加载另一个矢量图层后不会起作用。
因此,基本上过滤器仅在我第一次加载图层时起作用。我还注意到在我的浏览器的控制台日志中,它没有像这样查询GeoServer:
XHR finished loading: POST "http://127.0.0.1:8080/geoserver/wfs".
加载另一层后。