基于 Ganos 百行代码实现亿级矢量空间数据在线可视化

01 引言

如何对时空数据库中的亿级矢量空间数据进行在线可视化一直是业界难题。因数据体量大,传统方法需要将数据库中数据进行基于缓存切片的服务发布才能可视化,操作流程冗长,且有一大堆需要考虑的问题:

  • 如果对矢量数据进行预切片,数据要切多久?切多少级合适?存储瓦片的硬盘空间够用吗?
  • 如果使用实时瓦片,实时渲染瓦片的响应时间能保证吗?
  • 如果使用矢量瓦片,小比例尺的瓦片可能会有多大体积?传输会不会成为瓶颈?前端渲染能承受多大的数据量?

    如果是要快速浏览数据库中的大规模在线数据,传统用于“底图服务”的离线切片生产流程几乎无解,不但费时费力,又无法在线联机处理。黑科技来了,本文介绍如何使用RDS PG或PolarDB(兼容PG版或Oracle版)的Ganos时空引擎提供的数据库快显技术,仅用百行代码实现亿级海量几何空间数据的在线快速显示和流畅地图交互,且无需关注切片存储和效率问题。

02 技术特性解读

Ganos的在线快显处理的核心是将数据库和可视化进行了关联,提供了一种新的可视化索引技术——稀疏矢量金字塔(Sparse Vector Pyramid,SVP)索引。SVP具备两个关键特性:快与省

其中,快指两个阶段的快:

  • 金字塔创建快:Ganos利用空间索引对数据在空间上进行密集度划分,根据密集度建立一种稀疏矢量金字塔索引,相比传统切图流程减少了90%的数据计算量。同时,创建金字塔采用了完全并行处理模式,即使1亿条地类图斑数据生成金字塔也仅需耗费约10分钟时间。
  • 数据展现快:Ganos采用了视觉可见性剔除算法,根据Z-order排序,过滤掉大量不影响显示效果的数据,从而加快实时显示的效率。Ganos支持直接输出PNG格式的栅格瓦片和MVT格式的矢量瓦片,1亿地类图斑数据实时渲染显示的响应时间都达到秒级。

省也具有两个维度:

  • 节省磁盘空间:1亿条地类图斑数据生成金字塔索引仅仅占据原表5%大小的额外空间。
  • 节省开发时间:仅使用简单的SQL语句,通过调整语句参数即可灵活控制显示效果。

03 使用步骤

Ganos的快显引擎使用上非常简洁,已高度封装了SQL函数。需要注意的是,第一次使用快显引擎之前,需要显式创建对应的扩展模块,执行的语句如下:

CREATE EXTENSION ganos_geometry_pyramid CASCADE;

通过执行以上语句,快显引擎的计算组件将会被加载起来。

3.1 建立稀疏矢量金字塔

假设您已创建了某个矢量大表并导入了数据,接着就可以使用Ganos的st_buildpyramid方法创建矢量金字塔。

方法原型如下,更详细的参数描述可以参考官方文档。

boolean ST_BuildPyramid(cstring table, cstring geom, cstring fid, cstring config)

注:*左右滑动阅览

其中

  • table:矢量数据所在的表名。
  • geom:矢量字段名。
  • fid:矢量要素记录的唯一标识,支持Int4/Int8类型。
  • config:json格式的配置参数字符串。
    • 在本例中,我们指定矢量金字塔的名称和使用的逻辑瓦片大小(这个瓦片大小并非真实存在的瓦片,仅表示一种空间上的逻辑划分)

实际调用如下:

ST_BuildPyramid('points', 'geom', 'gid', '{"name":"points_geom","tileSize":512}')

注:*左右滑动阅览

我们为表points的geom字段创建了一个矢量金字塔,金字塔名我们指定为points_geom,同时设定金字塔的逻辑瓦片大小为512。

3. 2 获取栅格瓦片

栅格瓦片是图片形式的瓦片(Tile),是使用最广泛的一种地图瓦片形式。Ganos的ST_AsPng方法提供了在数据库端将矢量数据按需动态渲染为栅格瓦片的功能。该功能提供了最基础的栅格符号化能力,更多面向一些不需要复杂符号化的轻量级场景,如数管系统中。

方法原型如下,更详细的参数描述可以参考官方文档

bytes ST_AsPng( cstring name, cstring tile, cstring style)

其中

  • name:金字塔表名。
  • tile:瓦片索引行列号,Z_X_Y的形式。<

你可能感兴趣的:(数据库,可视化)