javascript - 自动重新加载 OpenLayers.Layer.Text 标记的数据

标签 javascript html openlayers openstreetmap

我目前正在尝试使用 OpenLayers 在 OSM map 上分层一些标记。页面应该以一定的间隔刷新并从数据库加载新数据。

我通过本地 servlet 将数据从数据库提供给 OpenLayers.Layer.Text,该 servlet 根据数据库中的记录构造输入文件。

我当前的方法是简单地使用 <meta http-equiv="refresh" content="3">它会重新加载页面,然后重新加载脚本。这种方法的问题是,OSM map 被重置,即缩放、 View 端口等。

因此,我尝试使用 OpenLayers 的刷新策略,但这似乎并未从相应层的 servlet 重新加载数据。

<!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>

有办法实现我想要做的事情吗?

最佳答案

OpenLayers.Layer.Text 不支持策略。

查看代码,没有任何重新加载数据的函数,但您应该能够使用以下方法重新加载图层数据:

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

关于javascript - 自动重新加载 OpenLayers.Layer.Text 标记的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41013053/

相关文章:

javascript - 在 javascript 中使用 "x-dom-event-stream"流?

javascript - 扫描JS数组最快的方法是什么

java - 使用 struts2 复选框显示/隐藏字段

javascript - 我怎样才能让我的不和谐机器人不从一个人那里获得多票

javascript - React-Native 预加载 uri 而 webview 不可见

javascript - 获取垂直于向量的两个点

leaflet - 以最小的带宽提供大型数据集

javascript - Angular 服务变量未在 View 中更新

html - 如何实现 SVG 1.2 Tiny textArea?

google-maps - 我可以将 google map/api 与 openlayers 集成吗?