2011-10-03 8 views
7

私は一部の頻繁に更新されたデータ(船舶トラック、またはより具体的には一連のポイント)を表示するOpenLayers(Geoserverが提供するWMSを呼び出す)を使用するアプリケーションを開発しています。OpenLayers更新戦略の問題

OpenLayers.Strategy.Refreshは、これを行うための最も賢明な方法のように見えます。これはそのままである(つまりは、進行中の層ごとに6秒をリフレッシュ)動作するはずです、私が言うことができるものから

underway = new OpenLayers.Layer.WMS("Underway Data", 
    "http://ubuntu-geospatial-server:8080/geoserver/underway/wms", 
    {'layers': 'underway:ss2011_v03', transparent: true, format: 'image/gif'}, 
    {isBaseLayer: false}, 
    {strategies : [new OpenLayers.Strategy.Refresh({interval: 6000})]} 
); 

map.addLayers([layer, underway]); 

、しかし何も:私はつまり、これをしようと少しwms.html例(OpenLayersを2.11)を変更しません起こる基本となるWMSが更新されています。手動でマップを更新すると、更新されたデータが表示されます。

私は明らかに何かが欠けていると確信しています。どんな助けでも大歓迎です。私はFirebugや何かで何かエラーを出すことはありません、それは何もしていないだけです。

答えて

10

まあ、私が知る限り、WMSサービスでリフレッシュ戦略を実行することはできません。だから私は代わりにWFSを使用するように自分のコードを変換し、期待どおりに動作します。コード:

 underway = new OpenLayers.Layer.Vector("WFS", { 
      strategies: [new OpenLayers.Strategy.BBOX(), new OpenLayers.Strategy.Refresh({interval: 4000, force: true})], 
      protocol: new OpenLayers.Protocol.WFS({ 
       url: "http://ubuntu-geospatial-server:8080/geoserver/wfs", 
       featureType: "ss2011_v03", 
       featureNS: "http://csiro.au/underway", 
       geometryName: "position" 
      }); 

私もBBOX戦略が必要です。私が見つけた別の問題は、手動でgeometryNameを指定する必要があることでした。そうでなければ、デフォルトでは "the_geom"になり、これは自分のレイヤーには存在しません。

-2

new OpenLayers.Strategy.Static()戦略を追加する必要があると確信しています。 Refresh戦略を有効にする必要があります。つまり、別の変数に固定する必要があります。

+0

そこには喜びはありません。私はOpenLayers.Strategy.Static()をトランクまたは2.11で見つけることができませんでした。私は彼らがおそらく働く(bbox、固定)のように見える他の戦略のいくつかを設定しようとしましたが、良いものはありませんでした。私の変更されたコードは次のようになりました: 'bboxStrategy = new OpenLayers.Strategy.BBOX(); bboxStrategy.setLayer(進行中); bboxStrategy.activate(); refreshStrategy = new OpenLayers.Strategy.Refresh({interval:2000、force:true}); refreshStrategy.setLayer(進行中); refreshStrategy.activate(); ' これで同じ問題が発生しましたが、何も起こりません。 – Caligari