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

相关文章
|
1月前
|
机器学习/深度学习 安全 大数据
揭秘!企业级大模型如何安全高效私有化部署?全面解析最佳实践,助你打造智能业务新引擎!
【10月更文挑战第24天】本文详细探讨了企业级大模型私有化部署的最佳实践,涵盖数据隐私与安全、定制化配置、部署流程、性能优化及安全措施。通过私有化部署,企业能够完全控制数据,确保敏感信息的安全,同时根据自身需求进行优化,提升计算性能和处理效率。示例代码展示了如何利用Python和TensorFlow进行文本分类任务的模型训练。
83 6
|
19天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
104 2
|
26天前
|
PHP 开发者 容器
PHP命名空间深度解析与最佳实践####
本文深入探讨了PHP中命名空间(namespace)的机制、应用场景及最佳实践,旨在帮助开发者有效避免命名冲突,提升代码的组织性和可维护性。通过实例讲解,本文将引导您理解如何在实际项目中灵活运用命名空间,以及如何遵循业界公认的最佳实践来优化您的PHP代码结构。 ####
|
24天前
|
PHP 开发者
PHP 7新特性深度解析及其最佳实践
【10月更文挑战第31天】本文将深入探讨PHP 7带来的革新,从性能提升到语法改进,再到错误处理机制的变革。我们将通过实际代码示例,展示如何高效利用这些新特性来编写更加健壮和高效的PHP应用。无论你是PHP新手还是资深开发者,这篇文章都将为你打开一扇窗,让你看到PHP 7的强大之处。
|
1月前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
74 3
|
1月前
|
监控 安全 Serverless
"揭秘D2终端大会热点技术:Serverless架构最佳实践全解析,让你的开发效率翻倍,迈向技术新高峰!"
【10月更文挑战第23天】D2终端大会汇聚了众多前沿技术,其中Serverless架构备受瞩目。它让开发者无需关注服务器管理,专注于业务逻辑,提高开发效率。本文介绍了选择合适平台、设计合理函数架构、优化性能及安全监控的最佳实践,助力开发者充分挖掘Serverless潜力,推动技术发展。
58 1
|
2月前
|
监控 安全 Java
构建高效后端服务:微服务架构深度解析与最佳实践###
【10月更文挑战第19天】 在数字化转型加速的今天,企业对后端服务的响应速度、可扩展性和灵活性提出了更高要求。本文探讨了微服务架构作为解决方案,通过分析传统单体架构面临的挑战,深入剖析微服务的核心优势、关键组件及设计原则。我们将从实际案例入手,揭示成功实施微服务的策略与常见陷阱,为开发者和企业提供可操作的指导建议。本文目的是帮助读者理解如何利用微服务架构提升后端服务的整体效能,实现业务快速迭代与创新。 ###
65 2
|
2月前
|
运维 Cloud Native 持续交付
云原生技术解析:从IO出发,以阿里云原生为例
【10月更文挑战第24天】随着互联网技术的不断发展,传统的单体应用架构逐渐暴露出扩展性差、迭代速度慢等问题。为了应对这些挑战,云原生技术应运而生。云原生是一种利用云计算的优势,以更灵活、可扩展和可靠的方式构建和部署应用程序的方法。它强调以容器、微服务、自动化和持续交付为核心,旨在提高开发效率、增强系统的灵活性和可维护性。阿里云作为国内领先的云服务商,在云原生领域有着深厚的积累和实践。
61 0
|
16天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
45 2
|
2月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
70 0

推荐镜像

更多