在openlayers中设置雷达数据动画的最佳方法


9

我有一个使用OpenLayers的项目,该项目在地图上显示雷达数据。雷达数据本身就是一堆多边形,每个多边形都填充有6种可能的颜色之一。目标是为地图上的雷达设置动画。每个文件都包含给定时间的雷达数据,并且文件间隔约5分钟,因此我目前的方法是遍历所有文件,并将它们一个接一个地加载到新的单独层中。创建每个图层后,将其可见性设置为false并将其添加到地图中。然后,我使用计时器为图层设置动画,该计时器可打开一层的可见性并关闭上一层的可见性。目前,这些图层都是矢量图层,并且数据是从KML文件加载的,尽管数据文件几乎可以是最适合该项目的任何格式。

这种方法的问题是,一旦我遇到相当长的时间跨度(大约3个小时左右)的数据(约等于36层),内存消耗就会变得非常高(大约250mb)。最终产品应该能够在一个循环中处理多达18个小时的数据,根据上述数字,仅动画就需要超过1GB的内存,并且有可能使浏览器崩溃或至少使其速度缓慢。

我尝试对每个图层使用WMS图层进行相同的操作,但是重绘速度太慢(动画每100毫秒更改一次图层),并且内存消耗并不比矢量版本好多少。

我搜寻了网络,试图找到一些如何执行此操作的示例,但是到目前为止,我空手而归。有没有人对如何执行此操作有任何建议?由于我已经坚持了好几个星期了,所以我会考虑您的任何想法,因为没有答案。

Answers:


9

尝试各种滑动窗口。您一次可以缓冲10层。一旦达到10层,就开始破坏层并将其从DOM和内存中删除。因此,一旦您到达第10层,就会破坏第0-9层,并加载可见性为false的第20-30层。这将为您提供大约10层的缓冲区,但是您可以根据自己的喜好修改容差。如果您觉得20层效果更好,请选择20层。

          {Destroy Layers} |10|11...19|20| {Start Loading Layers}
|---------------------------------------------------------------------------|
                           
        Timespan           Current Possition

先生,你真是个天才!我实际上还没有付诸实践,但是我看不出有什么理由不起作用,并且可调缓冲区意味着我们可以针对不同的环境进一步定制它。对于这个建议,我感激不尽!
TheOx 2012年

谢谢,我希望它能在实践中起作用。让我们知道结果如何。
CaptDragon

刚刚完成了初步测试,并且运行良好!代码中还有一些优化的余地,但是这种方法可以使内存占用空间减小,并且可以根据客户端计算机的内存和带宽进行配置。再次感谢您的出色建议!
TheOx 2012年

太好了,很高兴听到这个消息。
CaptDragon 2012年

@CaptDragon :(或TheOx)是否可以发布到工作示例中?我从某种程度上理解了解决方案,但是看到一个简单的示例和代码将非常有帮助,因为我遇到了几乎相同的问题。谢谢!
teknocreator

1

您是否考虑过简化矢量层以减小其文件大小。如果多边形包含的顶点多于显示所需的顶点,则对其进行简化(平滑处理)将减少文件大小,并减少细节。我不确定您可以使用什么软件,但是有几个GIS桌面应用程序包含地理处理功能以简化功能。


这是个好主意,但不幸的是,该项目需要以完整分辨率显示数据。但是,对于其他一些我们可能可以使用该技巧的数据层,我会记住这一点。
TheOx 2012年

1

除了简化数据(甚至一点点都可以节省很多空间)之外,您还尝试过MapServer或其他将数据转换为具有透明性的图块并创建地图层以放置在背景层之上的方法。我已经看到了具有数十万至数十万个多边形(或标记)的Choropleth映射的这种方法,但是由于服务器端的要求,我自己还无法尝试。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.