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});
}
}
私は数日間デバッグを続けていますが、これを解決する方法がわかりません。どんな助けでも大歓迎です。