0

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});
  }
}

私は数日間デバッグを続けていますが、これを解決する方法がわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

1

問題が見つかりました。ズームレベルが高すぎないかどうかを確認したので、事前定義されたレベルに変更しました。このチェックは、WFS レイヤーの属性でテーブルを埋めるために 1 回だけ呼び出されるメソッドにありました。どういうわけか、このメソッドはズームのたびに呼び出されます。これは正しくありません。これも修正してみます。これで最初の問題は解決しましたが、見返りに新しい問題が発生しました ;)

また行き詰まったら、新しい質問を投稿します。

ありがとう、

ポール

于 2013-03-19T13:33:28.013 に答える