【问题标题】:Does highcharts (or vaadin) have built-in abilities to use an algorithm like Ramer–Douglas–Peucker?highcharts(或 vaadin)是否具有使用像 Ramer–Douglas–Peucker 这样的算法的内置能力?
【发布时间】:2019-02-14 01:51:22
【问题描述】:

使用 Vaadin 的图表(最终使用 HighCharts),我试图绘制一个超过 10,000 个点的折线图。它实际上运行得相当快(绘制几秒钟)。但是,我想知道它是否可以更快,因为我在使用 JavaFx 图表时遇到了类似的问题,并发现人们已经使用“Ramer–Douglas–Peucker 算法”实现了一个解决方案,以这种方式减少数据点的数量绘制图形时,人眼基本上可以注意到它。 (这是来自 SO 的原始答案:Performance issue with JavaFX LineChart with 65000 data points)。

那么,highcharts 是否已经具有这样的内置功能?如果没有,Vaadin 呢?或者,我是否需要在 Vaadin 中重新创建这个逻辑,这意味着我最终需要为 Ramer-Douglas-Peucker 算法找到一个 Java 库......

【问题讨论】:

    标签: highcharts vaadin vaadin12


    【解决方案1】:

    很遗憾,Highcharts 没有内置“Ramer–Douglas–Peucker 算法”。但是,它有一个 boost 模块,可以在几毫秒内渲染数千个点。

    Boost 模块允许 WebGL 呈现某些系列类型 而不是默认的 SVG。这允许成千上万的数据 以毫秒为单位渲染的点。除了 WebGL 渲染,它通过跳过处理和检查来节省时间 尽可能的数据。

    API 参考:

    演示:


    此外,使用Highstock,您还可以使用dataGrouping

    数据分组是将数据值采样成更大的概念 块,以简化可读性并提高性能 JavaScript 图表。

    API 参考:

    演示:

    【讨论】:

      【解决方案2】:

      对于大多数图表类型,当您使用 Vaadin 图表时,应用算法来减少服务器端逻辑中的数据点数量实际上更有意义,例如,将数据从原始数据复制到您在图表中使用的 DataSeries 时。这不仅减少了渲染时间,还减少了将数据加载到浏览器的时间。

      如果需要,我还建议在服务器端将线性回归计算为额外的两点 DataSeries。

      【讨论】:

      • 是否有可能从 Vaadin 12 开始启用上述 Wojciech Chimiel 描述的 Boost 模块以及“Highstock”API? (如果是这样,一个简单的例子会非常有帮助——我发现这些非 Java api 调用的语法非常棘手,因此我使用了 Vaadin。)
      猜你喜欢
      • 2018-11-18
      • 1970-01-01
      • 1970-01-01
      • 2021-05-16
      • 1970-01-01
      • 2018-08-27
      • 2015-03-08
      • 1970-01-01
      • 2016-05-19
      相关资源
      最近更新 更多