Ganos三维引擎系列(二):可视域与阴影率分析

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 本文介绍了基于阿里云多模态时空数据库Ganos三维引擎构建可视域分析与阴影率分析的应用方法。Ganos三维引擎支持三大类存储结构:表面网格模型、体网格模型与3D实景模型,其中表面网格模型用于存储带有语义的类BIM的精细化三维模型,体网格模型用于存储地质体等非匀质“场”类三维模型,3D实景模型用于存储倾斜摄影、精白模等用于渲染的三维模型,三种存储结构都提供了原生数据类型、空间索引、分析算子、导入导出工具、可视化支撑等功能,为数字孪生类应用提供闭环的存算显能力。

关于Ganos

Ganos是阿里云数据库产品事业部联合阿里巴巴达摩院数据库与存储实验室联合共同研发的新一代云原生位置智能引擎,它将时空数据处理能力融入了云原生关系型数据库PolarDB、云原生多模数据库Lindorm、云原生数据仓库AnalyticDB和云数据库RDS PG等核心产品中。Ganos目前拥有几何、栅格、轨迹、表面网格、体网格、3D实景、点云、路径、地理网格、快显十大核心引擎,为数据库构建了面向新型多模多态时空数据的存储、查询、分析、服务等一体化能力。

本文介绍的三维引擎能力,依托阿里云云原生关系型数据库PolarDB建设输出。

关于Ganos三维引擎

三维数据管理是当前时空领域的热点,以数字孪生为代表的一系列三维空间系统应运而生,推动各类管理业务逐步走向精细。这种背景下,三维数据采集类别越发多样,采集精度越发提升,业务背后的三维空间计算效率与大规模三维模型渲染效率也逐步成为空间信息系统的痛点。

为了解决传统空间技术栈中“文件管、瓦片看、客户端算”所带来的数据资产分散、数据冗余及技术架构复杂问题,Ganos提出了基于大规模元胞网格构建视算一体能力的方案。存储方面,Ganos三维引擎提供了表面网格模型(SFMesh)、体网格模型(VOMesh)与实景模型(Scene)三种存储结构,其中表面网格模型用于存储带有语义的类BIM的精细化三维模型,体网格模型用于存储地质体等匀质/非匀质“场”类三维模型,3D实景模型用于存储倾斜摄影、精白模等用于渲染的三维模型;计算方面,Ganos提供了多种三维空间计算函数,并且将PolarDB弹性并行查询能力(ePQ)拓展到三维计算中,在多个数字孪生应用中实测全空间复杂分析计算效率相较于传统方案有50倍以上的提升;渲染方面,作为数据库产品,Ganos并不直接提供渲染引擎,但依托矢量快显的构建经验,Ganos将快显能力延伸至了三维数据,除了库内提供模型简化、纹理材质处理外,还提供了三维存储结构统一动态构建三维瓦片的方式直接对接渲染引擎提供可视化服务。

关于三种三维存储结构的差异,可以参考系列文章的第一篇:《Ganos三维引擎系列(一):倾斜摄影数据管理与可视化功能解析

基于Ganos三维引擎的可视域与阴影率分析

业务需求

可视域分析是基于给定的观察点、观察角度和观察范围,以一定的相对高度查找设定范围内的可见区域和不可见区域。可视域分析在观光浏览道路选择、森林防火瞭望塔布设、航海导航、航空以及军事方面有重要的应用价值。阴影率分析是对指定的空间与时间范围内,统计指定物体被阴影覆盖的时长所占比例。阴影率统计分析可广泛应用在城市规划、建筑物设计、景观分析等方面。这两种分析能力都是三维空间系统中常见的工具,对于客户直观开展规划设计有重要的作用。

但现阶段,常见的可视域分析、阴影率分析工具往往都是基于前端技术构建,主要是利用GPU以像素绘制的方式实现一个视觉上的可视范围。这种方案一方面依赖客户配置带高规格显卡的终端设备才能读取更大范围的三维数据,更为重要的是它无法真实计算出可视体/域的体积与面积,更无法开展基于可视体或者阴影范围的三维空间分析。随着数字孪生业务的深入开展,在园区的传感器布设、重大活动重点路线安保规划、全域生态监测等领域都需要精准计算出可视体、阴影范围的大小,判断POI点或者三维模型与它们的空间关系,最终精准寻找盲区,这些业务需求已经不是前端方案所能解决,需要后端给予相关技术能力的支持。

功能介绍

基于以上业务需求,Ganos在库内支持3D科学计算的系列能力,其中具备了可视域分析、阴影率分析等孪生场景最基础核心的查询与分析功能。

可视域分析

计算视锥体

视锥体是指视点在给定视角下最大可视范围所形成的几何体,是一个锥体。

            视椎体(俯视图)                                                          视椎体(侧视图)

函数

函数名

函数语法

函数功能

ST_ComputeFrustum

meshgeom ST_ComputeFrustum(cstring viewpoint);

计算视点在给定视角下的视锥体。

其中,viewpoint 参数是 JSON 格式的视点信息,可以通过此参数指定视点的位置、方位角、俯仰角、水平视角、垂直视角等。详见参考手册

示例

如下,表示计算一个人站在坐标(2938,  750,  90)处,身高1.8米(附加高度),面向正东方向(方位角为90度),低头35度(俯仰角为-35度),水平视角范围为90度,垂直视角范围为60度,最远能看到600米处,所构成的视椎体。

-- 该视锥体由32766个三角面片构成SELECT ST_NumPatches(ST_ComputeFrustum('{"x" : 2938, "y" : 750, "z" : 90, "h" : 1.8, "azimuth" : 90, "pitch" : -35, "horizontalFov" : 90, "verticalFov" : 60, "distance" : 600, "depthMapSize" : 128}'));--------32766

计算可视体

可视体是指视点在给定视角下,在三维场景中能看到(不被遮挡)的空间范围所形成的几何体,是一个闭合的网格。

                 可视体(俯视图)                                           可视体(侧视图)

函数

函数名

函数语法

函数功能

ST_ComputeViewShed

meshgeom ST_ComputeViewShed(scene sc, cstring viewpoint);

计算视点在场景中的可视体(基于视锥体,保留可见区域形成的几何体)

其中,参数 sc 是 Scene 对象,viewpoint 是视点信息,与 ST_ComputeFrustum 函数中一致详见参考手册

示例

如下,表示计算一个人站在坐标(2938,  750,  90)处,身高1.8米(附加高度),面向正东方向(方位角为90度),低头35度(俯仰角为-35度),水平视角范围为90度,垂直视角范围为60度,最远能看到600米处,在场景中可视范围所构成的可视体。

-- 该可视体由32766个三角面片构成SELECT ST_NumPatches(ST_ComputeViewShed(scene,'{"x" : 2938, "y" : 750, "z" : 90, "h" : 1.8, "azimuth" : 90, "pitch" : -35, "horizontalFov" : 90, "verticalFov" : 60, "distance" : 600, "depthMapSize" : 128}'))from t;--------32766

阴影率分析

阴影率分析功能目前还处于发布流程中,预计9月下旬可以在PolarDB-PG数据库中正式使用,用户手册同步上线。

某段时间阴影率

计算给定点在一段时间范围内的阴影率:根据用户指定的开始时间、结束时间,按照采样间隔进行采样,并计算每个时刻输入点是否被阴影所覆盖,最后统计输入点被阴影覆盖的时长所占比例。并将阴影率保存在点的m坐标中。

函数

函数名

函数语法

函数功能

ST_ShadowRatio

geometry ST_ShadowRatio(scene sc, geometry points, cstring sunlight);

计算给定点在一段时间内的阴影率

其中,参数 sc 是 scene 对象,points 是要计算阴影率的点数据,sunlight 是 JSON格式 的光照信息,可以通过此参数指定阴影率分析的经纬度坐标、开始时间、结束时间、时间采样间隔等。

示例

计算 (0 0 -2), (1 2 8), (-70 -400 1330) 3个点从 2021-07-12 08:00:00 +0800 到 2021-07-12 18:00:00 +0800 以1个小时为采样间隔的阴影率,3个点的阴影率分别为 0.636, 0, 0。

SELECT ST_AsText(ST_ShadowRatio(the_scene,'MULTIPOINT(0 0 -2, 1 2 8, -70 -400 1330)'::geometry,'{"location": "srid=4326; POINT(120 30)",     "start_time": "2021-07-12 08:00:00 +0800", "end_time":"2021-07-12 18:00:00 +0800", "time_interval": "01:00:00"}'))from t_scene;--------MULTIPOINT ZM ((00-20.636363636363636),(1280),(-70-40013300))

某个时刻阴影率

计算给定点在某一时刻的阴影率(0或1),并将阴影率保存在点的m坐标中,0表示未被阴影覆盖,1表示被阴影覆盖。

函数

函数名

函数语法

函数功能

ST_ShadowRatio

geometry ST_ShadowRatio(scene sc, geometry points, geometry location, cstring time);

计算给定点在某一时刻的阴影率

其中,参数 sc 是 scene 对象,points 是要计算阴影率的点数据,location 指定了阴影率分析场景所在的经纬度位置,time 指定了计算阴影率的时间。

示例

计算 (-2, 0, 0),  (0, 0, 0),  (2, 0, 0),  (0, 0, 2) 4个点在 2021-07-12 12:00:00 时刻的阴影率,4个点的阴影率分别为 0, 1,0, 0。

SELECT ST_AsText(ST_ShadowRatio(the_scene,'MULTIPOINT(-2 0 0, 0 0 0, 2 0 0, 0 0 2)'::geometry,'srid=4326; POINT(120 30)'::geometry,'2021-07-12 12:00:00 +0800'))from t_scene;-------- MULTIPOINT ZM ((-2000),(0001),(2000),(0020))

Ganos可视域、阴影率分析技术优势

相比于传统的技术方案,Ganos将计算下推到库内的优势在于:

  • 传统的可视域分析是通过GPU分析出结果,然后把结果绘制出来,这样基于像素绘制的结果只能用于展示,没有准确的结果参数也不能进行空间计算。而Ganos显式地构建了可视体与可视表面,可进行后续的分析计算。如基于计算的可视体体积或可视区域面积辅助监控布设,基于轨迹点与摄像头可视体的空间关系进行快速的监控追踪等。
  • 传统的可视域分析/阴影率分析技术方案是依赖前端的,而WebGL 的内存、显存有限,无法加载绘制数GB的模型数据,进而无法满足用户对大规模场景精确分析的需求。而Ganos将计算下推到数据库中,不依赖于GPU,可以支持对大规模场景进行精确的并行分析计算。

功能使用案例

下面,我们以存储在OSS上的某园区倾斜摄影数据为例,介绍如何使用Ganos进行可视域分析与阴影率分析。

创建扩展

通过执行如下SQL语句创建 ganos_importer 扩展及依赖(ganos_scene扩展会自动被创建):

create extension ganos_importer cascade;

数据入库

使用ST_ImportOSG函数(参考手册)导入倾斜数据数据。由于我们采用非并行的方式入库,因此可以自动建表,不需要提前创建目标表。

select ST_importOSGB('osgb','OSS://<ak>:<ak_secret>@oss-cn-beijing-internal.aliyuncs.com/ganos-bj/importer_data/osgb');

查看库内数据

查看主表数据:

select project_id, project_name, srid, aux from osgb;

查看某个瓦块数据:

select project_id, project_name, uid, lod, parent, children
from osgb_tile
where project_id ='9e25e927-e385-45cd-8da6-961b5841c4a9'limit1;

查看数据空间范围:

select box3d(st_union(tile::box3d))from osgb_tile;

计算视椎体/可视体

使用ST_ComputeFrustum函数计算视锥体并存到 frustum 表中:

createtable frustum asselect ST_ComputeFrustum('{"x" : 2938, "y" : 750, "z" : 90, "h" : 1.8, "azimuth" : 90, "pitch" : -35, "horizontalFov" : 90, "verticalFov" : 60, "distance" : 600, "depthMapSize" : 128}')as geom;

使用ST_ComputeViewshed函数计算可视体并存到 viewshed 表中:

createtable viewshed asselect ST_ComputeViewShed(tile,'{"x" : 2938, "y" : 750, "z" : 90, "h" : 1.8, "azimuth" : 90, "pitch" : -35, "horizontalFov" : 90, "verticalFov" : 60, "distance" : 600, "depthMapSize" : 128}')as geom from osgb_tile;

将可视体存在数据库后,可以使用三维空间关系函数ST_Contains(参考手册)、ST_Intersects(参考手册)等函数进行后续业务,如判断一个人是否位于摄像头的可视域内等;也可以使用ST_GeometryMatch(参考手册)函数把二维POI点吸附在三维数据上再进行空间关系判断。

计算阴影率

将要计算阴影率的点数据导入到 test_points 表中:

createtable test_points(id integer, points geometry);insertinto test_points select ......;insertinto test_points select ......;

使用ST_ShadowRatio函数计算一段时间内的阴影率:

createtable shadow_ratio1 asselect ST_ShadowRatio(osgb_tile.tile, test_points.points,'{"location": "srid=4326; POINT(120 30)", "start_time": "2021-07-12 08:00:00", "end_time":"2021-07-12 18:00:00", "time_interval": "01:00:00"}')as points from test_points, osgb_tile where test_points.id=1;

绿色:阴影率为0,红色:阴影率为1(位于建筑物内或地下点被遮挡、因此为红色):

1111.gif

使用ST_ShadowRatio函数计算某一时刻的阴影率:

createtable shadow_ratio2 asselect ST_ShadowRatio(osgb_tile.tile, test_points.points,'srid=4326; POINT(120 30)'::geometry,'2021-07-12 08:00:00 +0800')as points from test_points, osgb_tile where test_points.id=2;

由于计算的是某一时刻的阴影率,所以建筑物的一侧会被阴影覆盖(红色点),另一侧不会:

总结

Ganos作为全球首个库内原生提供多种三维数据存储分析能力的空间数据库,已经将狭义的空间数据拓展至“空天地、室内外、地上下、动静态”等全空间范畴,从数据库系统最底层为物理世界数字化提供时空处理框架,未来Ganos还将提供更多高效的库内三维空间分析能力,推动各行业数字孪生应用真正走向“视算一体”。

相关实践学习
【AI破次元壁合照】少年白马醉春风,函数计算一键部署AI绘画平台
本次实验基于阿里云函数计算产品能力开发AI绘画平台,可让您实现“破次元壁”与角色合照,为角色换背景效果,用AI绘图技术绘出属于自己的少年江湖。
从 0 入门函数计算
在函数计算的架构中,开发者只需要编写业务代码,并监控业务运行情况就可以了。这将开发者从繁重的运维工作中解放出来,将精力投入到更有意义的开发任务上。
相关文章
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
本文介绍了Ganos H3的相关功能,帮助读者快速了解Ganos地理网格的重要特性与应用实践。H3是Uber研发的一种覆盖全球表面的二维地理网格,采用了一种全球统一的、多层次的六边形网格体系来表示地球表面,这种地理网格技术在诸多业务场景中得到广泛应用。Ganos不仅提供了H3网格的全套功能,还支持与其它Ganos时空数据类型进行跨模联合分析,极大程度提升了客户对于时空数据的挖掘分析能力。
|
城市大脑 算法 数据可视化
数字孪生核心技术揭秘(六):传统三维gis与数字孪生的区别
当前对“数字孪生城市”没有一个严格界定的标准,本质上“数字孪生城市”是在传统三维GIS应用的基础上演化而来;随着技术创新和行业需求的发展,两者的差异也越来越大;本文梳理了两者的异同,同时比较了两者的适用场景。
5572 1
数字孪生核心技术揭秘(六):传统三维gis与数字孪生的区别
|
SQL 存储 数据可视化
Ganos矢量快显功能上手系列2:增强的MVT能力
本文主要介绍Ganos新增的2D矢量动态切片函数及其使用方法。新增的矢量动态切片函数能够大幅提升可视化效率,有效解决小比例尺MVT显示耗时久的问题。和PostGIS相比,小比例尺MVT的可视化效率提升可达60%以上。
|
9月前
|
SQL 自然语言处理 数据库
告别切屏|阿里云DMS MCP+通义灵码30分钟搞定电商秒杀开发
近日,阿里云数据管理DMS发布 开源DMS MCP Server,支持RDS、PolarDB、OLAP、NoSQL等40+主流数据源连接的多云通用数据MCP Server,一站式解决跨源数据安全访问。点击访问开源DMS MCP Server GitHub地址:https://github.com/aliyun/alibabacloud-dms-mcp-server
647 0
|
存储 算法 Cloud Native
Ganos地理网格引擎支撑无人机路径规划能力实践
随着新能源技术的迅猛发展,低空经济已经逐步成为新的战略性新兴产业,但不同于传统的地表活动,低空活动具有立体性、区域性、融合性等特点,这些特点对于如何安全引导低空活动的顺利开展带来了一系列需要解决的技术问题。Ganos地理网格引擎提供了基于网格的路径规划能力,可以使用DEM、DSM、倾斜摄影等数据构建复杂环境下的无人机路径规划应用。
|
数据采集 机器学习/深度学习 存储
数字孪生:物理世界与数字世界的桥梁
【9月更文挑战第17天】在当今科技飞速发展的时代,数字孪生作为连接物理与数字世界的创新桥梁,正推动各行各业的智能化转型。本文深入探讨其概念、技术原理、应用场景及未来趋势,展示其独特魅力和广阔前景。数字孪生是物理实体的精准虚拟模型,通过实时数据采集和仿真分析,为决策提供支持。其核心技术包括数字化建模、数据采集和仿真分析,广泛应用于制造业、医疗健康、智慧城市、交通物流、教育等领域,推动社会智能化发展。未来,数字孪生将更加智能化、云端化、标准化,并实现跨领域融合。
|
12月前
|
存储 人工智能 Cloud Native
小鹏汽车选用阿里云PolarDB,开启AI大模型训练新时代
PolarDB-PG云原生分布式数据库不仅提供了无限的扩展能力,还借助丰富的PostgreSQL生态系统,统一了后台技术栈,极大地简化了运维工作。这种强大的组合不仅提高了系统的稳定性和性能,还为小鹏汽车大模型训练的数据管理带来了前所未有的灵活性和效率。
|
存储 Cloud Native 数据挖掘
Ganos
Ganos
447 3
|
存储 SQL 数据可视化
Ganos三维引擎系列(一):倾斜摄影数据管理与可视化功能解析
本文介绍了阿里云多模态时空数据库Ganos三维引擎在倾斜摄影数据管理中的应用。Ganos三维引擎支持三大类存储结构:表面网格模型、体网格模型与3D实景模型,其中表面网格模型用于存储带有语义的类BIM精细化三维模型,体网格模型用于存储地质体等非匀质“场”类三维模型,3D实景模型用于存储倾斜摄影、精白模等用于渲染的三维模型,三种存储结构都提供了原生数据类型、空间索引、分析算子、导入导出工具、可视化支撑等功能,为数字孪生类应用提供闭环的存算显能力,本文重点介绍基于3D实景模型开展倾斜摄影数据管理与可视化等功能。
|
存储 关系型数据库 分布式数据库
基于PolarDB Ganos的气象数据处理:恶劣气象预警
本文介绍了在航海恶劣天气预警的场景中,PolarDB Ganos利用栅格模型对基于NetCDF的气象预测数据入库,利用数据库函数计算恶劣天气范围,并将其存储在PolarDB中。通过Ganos实时电子围栏功能,对船只位置并与恶劣天气范围对比,实现航海恶劣气象预警功能。