我有一台GeoServer服务器,它使用GeoWebCache提供我的图层。 这很好用。 我还有一个WFS图层,它使用过滤器(地址ID)填充。 大多数情况下,这个WFS层的功能少于5个,但在某些情况下它有大约20-30个功能,但总是少于100个。 我使用OpenLayers来显示图层,我有一个自定义搜索框供用户搜索地址。 如前所述,这一切都很好。
但是当我有一个大约的WFS图层时。超过10-15个功能,我(或用户)点击默认PanZoomBar上的缩小按钮,一些点击(可能太快)后,zoomlevel被重置为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});
}
}
我已经调试了几天但我不知道如何解决这个问题。 任何帮助将不胜感激。
答案 0 :(得分:1)
我发现了问题。 我检查了zoomlevel是否不是太高,如果是这样我将其更改为预定义级别。 此检查是一种方法,只应调用一次以填充具有WFS层属性的表。 不知何故,每次缩放后都会调用此方法。这是不正确的,我也会尝试解决这个问题。 所以我的初始问题已经解决,但我得到了一个新问题;)
如果我再次陷入困境,我会发布一个新问题。
谢谢,
保