https://mp.weixin.qq.com/s/hy3r16bKfwYmJyTB61onxQ
数据可视化,尤其是交互式数据可视化,往往是从数据中提取有意义见解的第一步。然而,在不遇到系统崩溃或延迟的情况下呈现大型数据集是一项挑战。在Jupyter环境中,使用常用的python可视化库对大规模地理空间矢量数据进行快速交互式可视化依然比较困难。例如,ipyleaflet 和Folium适合小数据集,随着数据量的增加,它们的性能很快就会受到影响。pyDeck 支持稍大的数据集,但在数据量超过十万个坐标后也很吃力。GeoPandas 绘制的是静态图像,失去了交互性的优势。
图片
本文介绍一个用于在Jupyter中实现快速、交互式地理空间矢量数据可视化的 Python 库-lonboard。lonboard基于GeoArrow 和 GeoParquet 等技术,使用GPU地图渲染技术,能够通过简单的界面实现大型地理空间数据集的交互式可视化。
在一个有 300 万个点的数据集上,ipyleaflet在 3.5 分钟后崩溃,pydeck 在 2.5 分钟后崩溃,但 lonboard 在 2.5 秒内就成功渲染了。
不仅所有 300 万个点都会同时呈现在地图上,而且每个点都有不同的颜色和半径,这两种颜色和半径都是通过属性列计算得出的。计算这些颜色和半径、将数据集从 Python 移植到浏览器,以及将其渲染到屏幕上仅需 2.5 秒。
Lonboard 速度如此之快,是因为它更高效地将数据从 Python 传输到 JavaScript(浏览器),然后再从 JavaScript 传输到图形处理器(GPU)。其他用于交互式地图的 Python 库将数据编码为 GeoJSON,然后从 Python 复制到浏览器。GeoJSON 的读写速度非常慢,导致必须将一个非常大的数据文件复制到浏览器。
图片
Lonboard 基于四项基础技术构建:deck.gl、GeoArrow、GeoParquet 和 anywidget。在lonboard中,整个管道都是二进制的。在 Python 中,从 GeoPandas 到 GeoArrow 再到 GeoParquet,避免了像 GeoJSON 那样的文本编码,从而产生了一个压缩的二进制缓冲区,可以高效地复制到浏览器。在 JavaScript 中,GeoParquet 到 GeoArrow 提供了高效的解码(在 WebAssembly 中)。然后,deck.gl 可以直接解释 GeoArrow 表的原始二进制缓冲区,而无需进行任何解析。
lonborad地址:https://github.com/developmentseed/lonboard
以下是使用lonboard形成的可视化demo:
1150万建筑物数据可视化
DuckDB和lonboard集成,轻松查询和可视化大型矢量数据集
纽约市一年的车辆碰撞情况,半径由行人和骑车人受伤人数决定,并按一天中的时间着色