2016-12-07 5 views
0

現在、OpenLayersを使用してOSMマップ上にいくつかのマーカーを重ねようとしています。ページは特定の間隔で更新され、DBから新しいデータをロードする必要があります。OpenLayers.Layer.Textマーカーのデータを自動的に再読み込みします。

DBのレコードから入力ファイルを構築するローカルサーブレットを使用して、DBからOpenLayers.Layer.Textにデータを供給します。

私の現在のアプローチは、<meta http-equiv="refresh" content="3">を使用してページをリロードし、続いてスクリプトをリロードすることです。このアプローチの問題は、OSMマップがリセットされていることです。つまり、ズーム、ビューポートなどです。

OpenLayersからリフレッシュ戦略を使用しようとしましたが、これはサーブレットからデータをリロードしていないようです。対応する層。

<!DOCTYPE html> 
<html> 
    <head> 
     <title>OSM View/title> 
     <meta charset="utf-8"/> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> 
     <!--meta http-equiv="refresh" content="3"--> 
    </head> 
    <body> 
     <div id="mapdiv" style="height:750px"></div> 
     <script src="http://www.openlayers.org/api/OpenLayers.js"></script> 
     <script> 
      var lat = 52; 
      var lon = 10; 
      var zoom = 18; 

      map = new OpenLayers.Map("mapdiv", { 
       controls: [ 
        new OpenLayers.Control.Navigation(), 
        new OpenLayers.Control.PanZoomBar(), 
        new OpenLayers.Control.LayerSwitcher() 
       ], 
       projection: 'EPSG:900913', 
       displayProjection: 'EPSG:4326', 
       numZoomLevels: 18, 
       units: 'm' 
      }); 

      mapnik = new OpenLayers.Layer.OSM("Karte"); 
      map.addLayer(mapnik); 

      var marker = new OpenLayers.Layer.Text("marker", { 
       location: "http://localhost:8080/marker", 
       projection: map.displayProjection, 
       strategies: [new OpenLayers.Strategy.Refresh({interval: 3000, force: true})] 
      }); 
      map.addLayer(marker); 

      var fromProjection = new OpenLayers.Projection("EPSG:4326"); // Transform from WGS 1984 
      var toProjection = new OpenLayers.Projection("EPSG:900913"); // to Spherical Mercator Projection 
      var position = new OpenLayers.LonLat(lon, lat).transform(fromProjection, toProjection); 

      map.setCenter(position, zoom); 
     </script> 
    </body> 
</html> 

私は何をしようとしていますか?

答えて

2

OpenLayers.Layer.Textは戦略をサポートしていません。

コードを見てみると、そこにデータをリロードするすべての機能がありませんが、使用してレイヤのデータを再ロードすることができるはずです。

setInterval(function() { 
    layer.clearFeatures(); 
    layer.loaded = false; 
    layer.loadText(); 
}, 3 * 1000); 
+1

はありがとうは、完璧に動作します! – padde

関連する問題