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

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

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


《阿里云产品四月刊》—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

相关文章
|
5天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
|
19天前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
60 3
|
30天前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
23天前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
51 0
|
30天前
|
监控 网络协议 数据挖掘
阿里云国际云解析DNS如何开启/关闭流量分析?
阿里云国际云解析DNS如何开启/关闭流量分析?
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
14 2
|
1月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
66 0
|
1月前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
52 0
|
1月前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
60 0
|
1月前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
80 0

推荐镜像

更多