在javascript + D3 / mapbox中可视化大量数据的高效/高性能方式

Efficient/Performant way to visualise a lot of data in javascript + D3/mapbox

提问人:LBes 提问时间:9/17/2018 最后编辑:LBes 更新时间:9/18/2018 访问量:99

问:

我目前正在寻找一种在 javascript 中可视化大量数据的有效方法。数据是地理空间的,我有大约 200 万个数据点。

现在我知道我不能直接给浏览器那么多数据点,否则它大部分时间都会崩溃(或者无论如何响应时间会很慢)。

我正在考虑让一个 javascript 窗口与 python 通信,该窗口将对数据执行所有操作并将 json 数据流式传输回 javascript 应用程序。

我的想法是让 javascript 窗口实时发送地图的边界框(东北点和西南点的纬度和 lng),以便 python 脚本可以在发送仅可见对象的 json 之前遍历所有条目。

我只是做了一个非常简单的脚本,基本上可以做到这一点

  1. 读取整个 CSV 并将数据存储在具有 lat、lng 和其他属性(2 或 3)的列表中
  2. 一个朴素的实现,用于检查点是否在 javascript 发送的边界框内。

目前,浏览所有数据点大约需要 15 秒......这太长了,因为在将它们流式传输到我的 javascript 应用程序之前,我还必须将它们转换为 geojson 对象。

现在当然,我可以首先按照纬度和 lng 的升序对我的点进行排序,这样检查点是否在 javascript 发送的边界框内的函数就会快一个数量级。但是,处理时间仍然太慢。

但即使承认事实并非如此,我仍然有一个问题,即在非常低的变焦级别下,我会得到太多的分数。限制min_zoom_level对我来说并不是一个真正的选择。所以我在想,我可能应该尝试对数据点进行聚类。

因此,我的问题是,您认为这种方法是正确的吗?如果是这样,如何计算集群......在我看来,我必须生成很多可能的集群(不同的缩放级别,地图上的不同位置......),我不确定这是否是一种有效和聪明的方法。

我非常希望您对此发表意见,如果您有可能的话,可以进行调整或完全不同的解决方案。

几乎与语言无关,但我会标记为 python,因为目前我的服务器正在运行 python 脚本,我相信 python 对于大型数据集非常有效。

最后说明:

我知道可以预先计算图块,我可以只提供我的 javascript 可视化,但由于我想对显示的内容进行交互式控制,这对我来说并不是一个真正的选择。


编辑:

我知道,例如,mapbox 提供了数据点的聚类,以方便显示大约一百万个数据点。

但是,我认为(这与这里的一个悬而未决的问题有关)虽然我可以轻松显示点聚类,但我不可能为我的聚类制作数据驱动的样式。

例如,如果我们以现在著名的种族地图为例,如果我使用 mapbox 对数据点进行聚类,并且一个聚类每个聚类给我 50 个人,我不能使聚类成为它收集的 50 人样本中最具代表性的种族的颜色。

编辑 2:

还了解了超星系团,但我不确定这个工具是否可以支持数百万个数据点而不会崩溃。

JavaScript Python 与语言无关 的地图 Mapbox

评论


答: 暂无答案