《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(2)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代

本文来源于阿里云社区电子书《阿里云产品四月刊》


《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)https://developer.aliyun.com/article/1554160

对象打码

 

数据入库后,我们可以对点数据进行打码。Ganos H3 提供了多种编码方式,比如通过指定经纬度、标准 H3 字符串、Integer 类型 H3 编码、二进制类型 H3 编码,以及直接Point 类型转换为H3 等方式。详细内容请参考文档:ST_H3FromTextST_H3FromIntST_AsH3GridST_H3FromLatLng 等。

 

这里我们使用的是 ST_H3FromLatLng 函数,用户通过指定将经纬度和目标层级可以直接获得 H3 编码。比入下面 SQL 语句就是从 FOIL 表中的 latlon 字段,生成第 13级的 H3 编码,并保存在 h3_lev13 列中,并通过 ST_AsText 函数查询具体 h3 编码。

 

-- Level 13UPDATE FOIL2013 SET h3_lev13 = ST_H3FromLatLng(lat,lon,13);-- 查询 SELECT id,lon,lat,ST_AsText(h3_lev13) as h3 FROM FOIL2013 LIMIT 100;

 

查询结果如下图:

 

 

image.png

 

网格聚合

 

使用网格的一个典型场景就是对空间数据按照格网码进行空间聚合统计分析,从而获取  热力图等专题地图信息。比如下面我们就是根据 h3_lev13 列中的 h3 编码,从 FOIL23 表格中统计出每个网格内的点数量(count(*)):

-- 按 照 h3_lev13 进 行 统 计 CREATE TABLE h3_count_lev13 ASSELECT ST_AsText(h3_lev13) AS h3code,count(*) FROM FOIL2013 GROUP BY h3_lev13;-- 查 询 统 计 结 果 SELECT ST_AsText(h3_lev13), ST_AsText(geometry),count FROM h3_count_lev13 order by count desc;

 

输出结果:

 

 

image.png

 

网格查询

 

Ganos H3 提供了多种基于 H3 编码的操作,比如下面我们可以通过 ST_GridDistance 方法获取 FOIL23 中所有的与空间位置(40.71481749,-73.99100368)对应格网的距离小于 10 的格网点:

SELECT
FROM
foi1201 3WHEREST GridDi stance (ST_ H3F romLatLng(40.71481749, - 73.9910036
8, 13) , h3 lev13) <10;

 

输出结果如下:

image.png

 

 

 

 

网格可视化

 

Ganos 支持像几何数据一样可视化 H3 网格,即可以把 H3 网格转化为矢量瓦片,再由前端渲染查看。Ganos 提供了原生 H3 网格 MVT 函数和索引,用户可以很便捷地查询和可视化 H3 网格及其包含的统计信息。值得一提的是,Ganos 支持可视化动态生成的H3 网格,比如用户想可视化层级为 10H3 网格,但是表格中并没有保存层级为 10 H3 网格,此时可以使用 ST_AsMVTST_AsMVTGeom(ST_H3FromLatLng(lat, lon, 10), ...)的命令来动态生成层级为 10H3 网格的可视化结果,但是在效率上会不如事先保存 H3 网格,因此下面主要介绍如何可视化保存在表格中的 H3 网格。

 

创建 H3 网格的索引 SQL 指令如下(创建索引对可视化并不是必须的,但能有效提升可视化效率):

 

CREATE INDEX ON h3_count_lev13 USING GIST(h3_lev13);

 

 

下面的 SQL 指令是根据 H3 网格获取编号为(14,4826,6157)的矢量瓦片,该指令和获取基于矢量数据的矢量瓦片的指令基本一致。

SELECT
ST_ AsMVT (tile)
FROM
( SELECT
ST_ AsMVTGeom(h3_ lev13,
ST_ Transform(ST_ TileEnvelope (14,
4826,
6157),4326) ) AS grid,
count
FROM h3_ count_ lev13
WHERE h3_ lev13 && ST Transform(ST_ TileEnvelope (14
4826,
6157),4326) ) AS tile;

 

下面的动图展示了在前端实时渲染在数据库端动态查询 H3 网格的矢量瓦片的结果,网格的颜色是根据网格对应的统计值动态决定的。

 

前端部分只需要一个 Python 脚本和一个 HTML 文件,启动时只需要运行该 Python 脚本和打开浏览器输入 localhost:5100 即可看到结果。Python 脚本会根据用户鼠标在地图上的位置和缩放层级自动生成相应的 SQL 查询发送给数据库,然后将数据库的查询

 

结果显示在网页上。前端的具体代码见附录部分。


 

技术优势

相比 pg-h3 等开源产品,Ganos H3 具有如下技术优势:

 

  • 支持更加丰富的打码方式,比如用户可以直接将 Ganos 的点、线、面类型转换为H3 编码

 

  • Ganos H3 在打码效率和格网查询效率上都进行了大量性能优化。

 

  • Ganos H3 支持与其他 Ganos 模型实现联合查询分析,比支持将几何(geometry) 类型直接转换为 h3 编码,或者使用 h3 与栅格(raster)模型进行基于格网的像素统计等。

 

  • Ganos H3 基于 PolarDB 底层的多态分层存储,可以实现基于 OSS 的海量数据点的打码与存储,显著降低存储成本。

 

总结

本文重点介绍了 Ganos H3 地理网格的相关能力,并基于一个最佳实践介绍了如何使用

 

H3    地理网格进行矢量数据的聚合、空间关系判断与可视化。地理网格是移动对象相关应用场景的重要支撑,它与轨迹、矢量、栅格等数据类型融合之后可以带来十分巨大的    业务价值与想象空间。Ganos    作为全球首个支持移动对象(MOD)的数据库,相关能力已经在交通、物流、出行、汽车等多个客户侧得到有效验证。相较于传统中间键或业    务代码实现的方式,Ganos  从数据库系统最底层为大规模移动对象提供时空处理框架, 计算效率与综合成本均有大规模改善。未来 Ganos 还将提供更多高效的面向移动对象的场景的库内原生分析能力,推动相关领域的空间信息应用全面走向在线化


《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(3)https://developer.aliyun.com/article/1554158

相关文章
|
18小时前
|
调度
【浅入浅出】Qt多线程机制解析:提升程序响应性与并发处理能力
在学习QT线程的时候我们首先要知道的是QT的主线程,也叫GUI线程,意如其名,也就是我们程序的最主要的一个线程,主要负责初始化界面并监听事件循环,并根据事件处理做出界面上的反馈。但是当我们只限于在一个主线程上书写逻辑时碰到了需要一直等待的事件该怎么办?它的加载必定会带着主界面的卡顿,这时候我们就要去使用多线程。
|
6天前
|
存储 Cloud Native 关系型数据库
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
《阿里云产品四月刊》—Ganos H3 地理网格能力解析与最佳实践(1)
|
1天前
|
存储 安全 Java
深度长文解析SpringWebFlux响应式框架15个核心组件源码
以上是Spring WebFlux 框架核心组件的全部介绍了,希望可以帮助你全面深入的理解 WebFlux的原理,关注【威哥爱编程】,主页里可查看V哥每天更新的原创技术内容,让我们一起成长。
|
2天前
|
关系型数据库 分布式数据库 数据库
PolarDB-X源码解析:揭秘分布式事务处理
【7月更文挑战第3天】**PolarDB-X源码解析:揭秘分布式事务处理** PolarDB-X,应对大规模分布式事务挑战,基于2PC协议确保ACID特性。通过预提交和提交阶段保证原子性与一致性,使用一致性快照隔离和乐观锁减少冲突,结合故障恢复机制确保高可用。源码中的事务管理逻辑展现了优化的分布式事务处理流程,为开发者提供了洞察分布式数据库核心技术的窗口。随着开源社区的发展,更多创新实践将促进数据库技术进步。
11 3
|
3天前
|
前端开发 开发者
深入解析Vite.js源码
【7月更文挑战第1天】Vite.js 深入解析:以其无bundle开发、动态ES模块加载提升开发效率;本地HTTP服务器配合WebSocket实现热更新;按需加载减少资源占用;预构建优化生产环境性能;基于Rollup的插件系统增强灵活性。Vite,一个创新且高效的前端构建工具。
12 0
|
8天前
|
Java 容器 Spring
Spring5源码解析5-ConfigurationClassPostProcessor (上)
Spring5源码解析5-ConfigurationClassPostProcessor (上)
|
8天前
|
NoSQL Java Redis
【源码解析】自动配置的这些细节都不知道,别说你会 springboot
【源码解析】自动配置的这些细节都不知道,别说你会 springboot
|
14天前
|
XML Java 数据格式
Spring容器启动源码解析
Spring容器启动源码解析
|
14天前
|
机器学习/深度学习 缓存 算法
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
netty源码解解析(4.0)-25 ByteBuf内存池:PoolArena-PoolChunk
|
15天前
|
存储 NoSQL 算法
Redis(四):del/unlink 命令源码解析
Redis(四):del/unlink 命令源码解析

热门文章

最新文章

推荐镜像

更多