我有一个使用GeoWebCache提供图层的GeoServer服务器。这可以很好地工作。我还有一个使用过滤器(地址ID)填充的WFS层。大多数情况下,这个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});
}
}
我已经调试了几天了,但我不知道如何解决这个问题。任何帮助都将不胜感激。
发布于 2013-03-19 13:33:28
我找到了问题所在。我检查了缩放级别是否太高,如果是的话,我将其更改为预定义的级别。此检查所在的方法应该只调用一次,以便用WFS层的属性填充表。不知怎么的,每次缩放之后都会调用这个方法。这是不正确的,我也会尝试修复它。所以我最初的问题解决了,但我得到了一个新的回报;)
如果我再次卡住了,我会发一个新的问题。
谢谢,
保罗
https://stackoverflow.com/questions/15495176
复制