2013-03-19 85 views
0

我有一个使用GeoWebCache提供图层的GeoServer服务器。 这工作正常。 我也有一个WFS层,它使用过滤器(地址ID)填充它。 这个WFS图层通常少于5个特征,但在某些情况下它有20-30个特征,但总是少于100个。 我使用OpenLayers来显示图层,并且我有一个自定义搜索框供用户搜索地址。如前所述,这一切都很好。Openlayers:缩放WFS有时会返回到第一个缩放级别

但是,当我有一个WFS层约。在一些点击(可能太快)缩放级别被重置为WFS图层的原始缩放级别(缩放以适合)之后,超过10-15个特征和我(或用户)单击默认PanZoomBar上的缩小按钮。 这不会发生时,少于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}); 
    } 
} 

我已经调试好但现在我不知道如何解决这个问题。 任何帮助将不胜感激。

回答

1

我发现了这个问题。 我做了一个检查,如果我把它改为预定义的级别,缩放级别不是太高。 此检查位于只应调用一次以填充WFS图层属性的表格中。 不知何故,每次缩放后都会调用此方法。这是不正确的,我也会尝试解决这个问题。 所以我最初的问题得到解决,但我得到了一个新的回报;)

如果我再次卡住,我会发布一个新的问题。

感谢,

保罗