PG Ganos时空场景开发实践 ——图贲

内容简要:

一、认识Ganos

二、如何使用Ganos

三、进阶实战

 

 

一、认识Ganos

(一)Ganos是什么

Ganos是包含SQL + NoSQL云数据库的时空引擎。

Ganos取名于大地女神盖亚(Gaea) 和时间之神柯罗诺斯 (Chronos),代表“时空”结合。Ganos的使命是将时空地理信息处理融入公有云/专有云PaaS服务,成为一种普惠计算。

PG Ganos时空场景开发实践  ——图贲

上图列举了Ganos的许多特性,这些特性有数据库本身的能力,更多的是Ganos赋能给数据库之后的能力。

 

(二)Ganos支持哪些产品

PG Ganos时空场景开发实践  ——图贲

Ganos不是一个独立的产品,往往以赋能的方式嵌入在数据库产品中。

如上图所示, Ganos赋能的产品包括RDS PG、PolarDB、ADB PG、Lingdorm/HBase以及DLA。其中RDS PG和PolarDB是事务型关系数据库,也可以做一些简单的分析。这两款数据库中的模型,Ganos的功能是最全面也是最丰富的。

可以将Ganos理解为PostGIS计时的升级版本PostGIS++,完全兼容PostGIS,而其他几种数据库更多是面向大数据分析型的场景。

 

(三)Ganos中丰富的时空模型

PG Ganos时空场景开发实践  ——图贲

相比PostGIS,Ganos在时空模型上进行了较多的扩充。

除了支持传统的几何模型、栅格模型和拓扑网络模型,还扩充支持了网格模型、时空轨迹模型以及点云模型。其中空间网格模型是Ganos3.0版本推出的新特性,编码标准遵循自然资源部地球空间网格编码规则,在这个规则基础之上设计和实现。

 

 

二、如何使用Ganos

(一)创建Ganos扩展

PG Ganos时空场景开发实践  ——图贲

在PostgreSQL数据库中使用Ganos需要先创建Ganos的扩展。

上图列举了Ganos中的七大模型以及扩展语句,其中六个模型在上面已做过介绍,此处要额外补充的是矢量金字塔模型。它是在几何模型基础之上新增的一个扩展,是为了能够快速显示大规模空间几何数据(千万级以上)而设计的一种结构。矢量金字塔对空间几何数据创建稀疏索引,按规则对密集区域预处理,可以输出标准的mvt-pbf格式数据,通过Ganos提供的矢量金字塔,亿条空间几何记录可以实现分钟级预处理、秒级终端显示。

PG Ganos时空场景开发实践  ——图贲

创建扩展之后,如上图所示,在数据库中可以通过\dx命令就能查询到所有已经创建的扩展,目前Ganos3.3版本。

 

(二)矢量、栅格、轨迹入库

创建Ganos扩展之后,接下来要解决数据入库,不同的数据类型有不同的入库方法:

Ø  矢量数据入库

主要依赖空间开源的工具,包括Ogr2ogr、shp2pgsql、QGIS、pg_dump/pg_restore等。

Ø  栅格、遥感数据入库

1)Ganos提供入库接口ST_importFrom、ST_createRast;

2)支持OSS、NAS等外部挂载入库,表示原始文件放在OSS或NAS中,将源数据入到数据库,金字塔数据可选择放入数据库,也可选择放入OSS或NAS中;

3)pg_dump/pg_restore时,外部数据不需要挪动;

4)入库时支持金字塔内建+外建随机组合;

5)批量文件并行入库,支持单幅超大影像并行入库。

Ø  轨迹数据入库

Ganos提供入库接口ST_makeTrajectory;

支持轨迹点动态追加;

支持点表抽取为轨迹对象。

Ganos与SuperMap、ArcGIS完成对接, 矢量数据与栅格/遥感数据可借助其平台直接入库。

 

(三)PG Ganos如何管理PB级遥感影像

1. PostgresSQL + Ganos + OSS组合

PG Ganos时空场景开发实践  ——图贲

上文中提到,Ganos在云上以OSS存储,它是打通的。因此通过“PostgresSQL + Ganos + OSS”组合,可实现 PB级遥感影像的管理。源数据和部分金字塔数据可以存储在数据库内部,遥感原始数据存放在OOS中,由于OOS存储价格低廉,使得用户的使用成本也有所降低。

 

2. 遥感影像注册(入库)

PG Ganos时空场景开发实践  ——图贲

只需要按照insertSQL语句直接写入到数据库,将OSS地址传给createrast接口即可。

 

3. 大范围影像拼接、镶嵌

将遥感影像数据注册入库之后,在Ganos也可以通过ST_mosaicFrom、ST_mosaicTo对大范围的影像进行拼接镶嵌等操作再进行输出,达到管理PB级遥感影像管理的目的。

 

(四)PG Ganos如何管理轨迹数据

PG Ganos时空场景开发实践  ——图贲

如上图所示,Ganos管理轨迹数据主要通过轨迹构造、轨迹压缩和轨迹相似性判断。

在Ganos中有原生的轨迹模型叫Trajectory,在创建轨迹表时可直接用这个数据类型。轨迹构造的单独接口makeTrajectory有很多的重载版本,具体使用方式可在官网的用户手册里进行查看。

轨迹还提供一些轨迹压缩与轨迹相似性判断这些比较重要的接口。轨迹压缩是通过Compress压缩接口保留重要的轨迹特征点,因此压缩质量会更好。轨迹相似性目前主要支持Lcs算法以及Jaccard的这种路径匹配算法。

 

(五)Ganos与开源工具

PG Ganos时空场景开发实践  ——图贲

如上图所示,Ganos无缝对接兼容PostGIS的各类GIS软件,显示和编辑包括GeoServer、QGIS、uDig、OpenJump等,这里重点介绍PGAdmin4。

Ganos团队对PGAdmin4进行了定制修改,目前能支持显示Ganos中的矢量和栅格数据,后续也会支持轨迹数据的直接显示。同时,在PGAdmin4中可以使用Ganos矢量金字塔功能,也就是说在PGAdmin4中可以直接显示上亿级的矢量数据,可以达到不切变、无障碍浏览效果。

PG Ganos时空场景开发实践  ——图贲

三、进阶实战

(一)实战介绍

Ø  实战课题

1)如何通过Ganos快速分析城市结构、社会属性与新冠病毒传播的之间的关系;

2)如何在Ganos中通过轨迹数据追踪患者行程,并挖掘风险点。

Ø  实战技能

1)利用Ganos进行空间统计分析;

2)实现矢量、栅格一体化查询;

3)实现轨迹追踪;

4)实现跨区域时空查询。

Ø  实战目的

1)熟练使用Ganos;

2)学会多源数据融合处理;

3)实现时空场景快速呈现,减少开发成本。

 

(二)空间统计分析

1.数据准备

数据准备包含两个类型的数据:矢量数据与栅格数据。

PG Ganos时空场景开发实践  ——图贲

矢量数据包含行政街区数据与患者案例数据。如上图所示,通过矢量数据可以看到案例患者的性别与年龄,确诊医院,所属街区,家庭住址等。

PG Ganos时空场景开发实践  ——图贲

栅格数据是具有社会属性的数据,包括Ndvi监测,建筑密度,建筑高度值等 都以Tif文件形式存在。

 

2.数据入库

Ø  矢量数据库入库

ogr2ogr -nln hk_tpu -nlt MULTIPOLYGON -geomfield geom -f PostgreSQL

PG:“dbname=‘ganos_train_db’host=‘pgm-***.rds.aliyuncs.com'port='1921'

user='ganos_train' password='ganos@2021‘“ ”./data/hk_tpu_84.shp”

ogr2ogr -nln hk_cases …“./data/sick_cases.shp”

矢量数据是用Ogr2ogr进行入库,填写的是云上购买的RDS PG的访问参数。

PG Ganos时空场景开发实践  ——图贲

Ø  栅格数据入库

l  首先,Tif文件上传至OSS;

l  其次,执行导入的SQL语句;

insert into hk_ndvi_rast values(1, st_importfrom('rbt', 'OSS://accessKey:accessSecret@oss-cn-beijing-internal.aliyuncs.com/bucket/data/ndvi_spot_84.tif'));

这里由于影像文件较小,采用的是Importfrom接口,可以将影像文件的所有像素值全部写入到数据库。

 

3.统计分析

PG Ganos时空场景开发实践  ——图贲

如上图所示,假如要统计香港街区患者案例较多的街区编号,可以通过  st_contains空间查询接口,快速的得到案例排名前5的街区编号,分别为121、131、212、113、144。

 

(三)矢栅一体化查询

用Ganos可以进行矢量+栅格一体化查询,提高开发效率。例如查询街区编号为121区域的Ndvi监测总值、平均值,查询某某街区的建筑密度、建筑高度等。在以往的GIS方式中,上述查询通常需要五个步骤,如下图所示:

PG Ganos时空场景开发实践  ——图贲

如今用Ganos一条SQL语句即可搞定,语句如下:

PG Ganos时空场景开发实践  ——图贲

通过SY_Values接口传入一个栅格对象,接着再传入一个几何对象,指定栅格对象的查询波段,然后就可以统计几何对象范围内所有的像素值,同时计算它的平均值,极大提高开发效率。

 

在矢删一体化的基础上,可以分析城市结构、社会属性与新冠病毒传播的之间的关系,以下是通过一条SQL语句查询计算所有街区的ndvi平均值与案例数之间的关系。

PG Ganos时空场景开发实践  ——图贲

NDVI值表示植被指数,当这个值过大或者过小时,不一定代表人群数多,往往是在中间值时,人口聚集最多。如上图所示,我们截取了前面几十条以及后面几十条数据,通过结果可以发现NDVI值在为0.2~0.27之间,它的案例数是最聚集的。

同样通过一条SQL语句,我们可以计算所有街区的建筑高度值与案例数之间的关系,如下所示:

PG Ganos时空场景开发实践  ——图贲

可以看到,在建筑密度比较低的这些街区中,案例分布通常是个位数。在建筑密度比较高的这些街区中,案例数明显增加,最大值也是分布在建筑密度比较高的这些区域,由此可以反映出来建筑密度值越大,案例数量呈现聚集性。

 

(四)轨迹追踪

1.用点表构造轨迹表

PG Ganos时空场景开发实践  ——图贲

我们可以将患者的案例形成轨迹,同时通过轨迹追踪患者的行程,挖掘一些潜在的风险点。

如上图所示,我们用案例编号查询行程,可以看到编号为105的案例在不同的时刻去过很多场所,监测时间记录不够详细,只具体到某一天。可以将监测点抽取为行程点形成轨迹,通过ST_makeTrajectory,把编号为105的案例聚合成一条轨迹写入到轨迹表里。

如果想把所有的患者案例聚合成轨迹,将这个查询语句直接改成Group By就可以实现。

 

 

2.轨迹追踪

形成轨迹表后可以进行轨迹追踪,需要经过下列语句:

Ø  轨迹空间显示

create table hk_case_traj_geom as select id,st_trajectoryspatial(traj) as geom from hk_case_traj;

Ø  轨迹追踪

select traj from hk_case_traj where id = 230;

例如我们查询编号为230的轨迹,可到轨迹表中输入相应编号进行查询,可以快速查询到该编号到过的场所与主要走向,如下方所示:

PG Ganos时空场景开发实践  ——图贲

PG Ganos时空场景开发实践  ——图贲

(五)时空查询

如果通过案例查询310区域,那么在案例表中会显示该区域曾出现过一个患者案例,如下图所示:

PG Ganos时空场景开发实践  ——图贲

但我们拿到行程轨迹后,可以进行轨迹跨区域时空查询,包括时间空间的交织,挖掘潜在的风险点。实现语句如下:

select traj from hk_tpu a, hk_case_traj b where

st_intersects(b.traj,'2020-03-19

00:00:00'::timestamp,'2020-03-21

00:00:00'::timestamp, a.geom) and a.tpu = 310;

通过这种方式,可以查询到穿过310区域的患者轨迹有8条,影响风险等级评判。

 

(六)使用接口汇总

Ø  Ganos Geometry

ST_Intersects、ST_Contains

矢量接口:主要是空间关系的判断。

Ø  Ganos Raster

ST_importFrom、ST_createRast、ST_Values、ST_mosaicFrom、ST_mosaicTo

栅格接口:主要是入库、矢量栅格一体化查询以及拼接镶嵌。

Ø  Ganos Trajectory

ST_makeTrajectory、ST_trajectorySpatial、ST_Intersects

轨迹接口:主要是轨迹构造,轨迹的空间对象,以及轨迹的时空查询。

上一篇:Linux删除目录下的文件的10种方法


下一篇:Docker的价值和应用场景分析