我有一个 GeoServer 服务器,它使用 GeoWebCache 提供我的图层。这工作正常。我还有一个 WFS 层,它使用过滤器(地址 ID)填充。大多数情况下,这个 WFS 图层的要素少于 5 个,但在某些情况下,它具有大约 20-30 个要素,但总是少于 100 个。我使用 OpenLayers 来显示图层,并且我有一个自定义搜索框供用户搜索地址。如前所述,这一切正常。
但是当我有一个大约有一个 WFS 层时。超过 10-15 个功能,并且我(或用户)在单击(可能太快)后单击默认 PanZoomBar 上的缩小按钮,缩放级别重置为 WFS 图层的原始缩放级别(缩放以适应)。当功能少于 10 个时,不会发生这种情况。
我没有任何可能导致这种行为的花哨的代码,它发生在 FireFox、IE 和 Chrome 中。
这是我创建 WFS 层的代码:
var renderer = OpenLayers.Util.getParameters(window.location.href).renderer;
renderer = (renderer) ? [renderer] : OpenLayers.Layer.Vector.prototype.renderers;
wfsLayer = new OpenLayers.Layer.Vector("Dakvlakken", {
renderers: renderer,
displayInLayerSwitcher: true,
strategies: [new OpenLayers.Strategy.BBOX()],
filter: new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: "adres_id",
value: startAdresID}),
protocol: new OpenLayers.Protocol.WFS({
url: "http://MyIP/geoserver/wfs",
featureType: "full",
srsName: "EPSG:28992",
geometryName: "geom_rd"
})
});
这是我在用户选择不同地址后更改过滤器的方式:
function changeFilter(newValue, x, y, adres)
{
wfsLayer.destroyFeatures();
filter = new OpenLayers.Filter.Logical(
{
type: OpenLayers.Filter.Logical.AND,
filters: [
new OpenLayers.Filter.Comparison(
{
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: "adres_id",
value: newValue
}),
new OpenLayers.Filter.Spatial(
{
type: OpenLayers.Filter.Spatial.BBOX,
value: new OpenLayers.Bounds(x-50, y-50, x+50, y+50),
projection: "EPSG:28992"
})
]
});
wfsLayer.filter = filter;
wfsLayer.refresh({force: true});
}
}
我已经调试了好几天了,但我不知道如何解决这个问题。任何帮助都感激不尽。