探秘三维地形瓦片服务:流畅展现全球地貌的秘密揭秘

news2025/3/15 15:11:42

想象一下,如果我们能将全球地形一次性清晰地呈现在我们的电脑屏幕上,那将是怎样的场景?即使拥有比大多数人性能更强悍的电脑,也会忍不住说一句:“卧槽,卡死了”!那么,要在电脑中流畅地展示全球地形,这是一个怎样的挑战呢?然而,随着三维地形瓦片服务的出现,仿佛为我们打开了通往神秘世界的一扇大门,引领我们踏入其中,去探索那些隐藏的奥秘。

图片来源:网络

一、global-geodetic规则解密:揭秘地球'大卸八块'的组织奥秘

首先要明确的一点是,地球表面是个球体,即使地球表面的地形全部显示在电脑上,我们也无法同时看到地球的全貌。而且,随着显示的地球区域范围越大,需要显示的地形精度反而越小,此时显示高精度的地形数据无疑是“高射炮打蚊子”——小题大作。那么该如何做呢?那就不得不提一下——global-geodetic规则。

首先,我们必须明确一点:地球的表面是一个球体,即使将其全部显示在电脑上,我们也无法一览全貌。此外,随着显示范围的扩大,所需地形数据的精度反而会减小。在这种情况下,显示高精度地形数据就好比是“用高射炮打蚊子”——有些大题小做。那么,如何解决这个问题呢?这时候,就不得不提到global-geodetic规则。
global-geodetic规则的实现基于地球的几何特性和数据结构。这个规则的核心原理是将地球表面划分为经度和纬度网格,并运用四叉树数据结构来有序地组织和管理地形数据。

经纬度网格图 来源:百度图片

使用经纬度坐标系来表示地球上的点。基于WGS84大地坐标系,我们将地球表面划分为网格,形成以经度和纬度为坐标轴的网格系统。这种划分方式确保了在不同区域的地形数据分辨率相对均匀,同时也使得地球表面地形的表示得更加精确和一致。

global-geodetic规则原理示意图,来源:百度图片

采用四叉树数据结构来组织地形数据。四叉树是一种递归的数据结构,它将一个区域划分为四个子区域,并在每个子区域中再次应用相同的划分方法。这样一直递归下去,直到达到某个预定义的终止条件。与传统的四叉树不同的是,地球表面的0级瓦片有两个根瓦片,分别是东半球和西半球瓦片。通过构建四叉树地形金字塔,我们能够有效地管理大规模地形数据,并在不同级别上实现地形数据的分辨率适应。这种方法不仅能够支持全球范围的地形表示,还能够提供局部细节的有效支持。

四叉树分割地形示例图,来源:百度图片

采用{x}{y}{z}类型的方式获取地形瓦片数据。在global-geodetic规则中,我们将地球按经纬度投影的方式展开成一个平面坐标系。在这个坐标系中,以经纬度(-180,-90)为原点,沿着经纬度增加的方向,行列号依次递增。因此,地球上的任何一个位置,都可以通过该位置的经纬度坐标和需要显示的地形层级来计算出所在的地形瓦片行列号。根据计算得到的行列号和层级,我们可以以{x}{y}{z}类型的方式获取地形金字塔中相应的地形瓦片数据。例如,对于经纬度范围分别为[90,180]、[-90,0]的区域,可以通过类似于 "http://assets.agi.com/stk-terrain/world/tiles/1/0/0.terrain"的地址获取其1级地形瓦片。

图片来源:网络

二、解密地形数据格式:探索Heightmap和Quantized-Mesh格式的地形瓦片之谜

在了解了global-geodetic规则如何将地球“大卸八块”之后,我们来探讨一下单个地形瓦片数据的构成。目前,基于global-geodetic规则组织的瓦片主要有两种格式:Heightmap格式的地形瓦片和Quantized-Mesh格式的瓦片。

  • Heightmap格式的地形瓦片

Heightmap格式的地形瓦片通过一个65*65像素大小的图块形式来表示一片地形区域。对于每个图块中的单个像素,它记录着一个16Bit大小的高度整数值。然后,通过以下计算规则来得到海拔值:

H = Pixel /5 - 1000

图块是按照每行自西向东、每列自北向南的顺序从左上角顺序排列。相邻瓦片之间有一行或者一列的重合,以确保相邻瓦片之间的高度值逐渐过渡,从而在加载相邻瓦片时不会出现明显的缝隙或断裂,使得地形呈现出更加平滑和连续的视觉效果。

相邻瓦片关系图,来源:术之多

  • Quantized-Mesh格式的地形瓦片

Quantized-Mesh格式的地形瓦片与Heightmap格式有所不同,它采用了特殊编码的三角形网格。在Quantized-Mesh中,每个图块都是一个由三角形组成的网格,其中顶点与图块边缘处的相邻网格重叠。换句话说,这意味着在图块的边缘部分,西部瓦片中最东部的顶点与东部瓦片中最西部的顶点具有相同的经度。这种设计确保了地形瓦片在边缘交界处的平滑过渡,使得加载相邻瓦片时不会出现明显的断裂或不连续。

Quantized-Mesh格式构建的地球网格图 来源:Mapmost For UE

每个瓦片图块主要记录着经特殊编码的用于构建三角形网格的经纬高(u、v、h)值以及构网索引(indices)值。利用以下的计算规则,我们可以将瓦片中压缩记录的u、v、h值还原为真实的经纬高值:

Y=Vmin+(X/32767)*(Vmax-Vmin)

其中,X代表的是经过特殊编码压缩的u、v、h值,而Vmin、Vmax代表的是通过行列号计算得到的该瓦片所对应区域的经纬高度的范围。
加载地形瓦片服务时,通过反算经纬高值和记录的构网索引值,即可线性插值构建单个地形瓦片的三角网。同时,为了避免相邻地形瓦片之间出现裂缝,引入了裙边(skirt)的概念。裙边通过四个(边缘)索引列表保存地形瓦片所有边缘上的顶点和索引值,确保地形瓦片能够无缝衔接,呈现连续且真实的地形表现。这种组织方式是目前应用最广泛的一种三维地形瓦片组织方式。

三、全球地形流畅展现:视锥体剔除技术的奥秘揭秘

就像前面说的一样,我们把地球的地形数据按照global-geodetic规则“大卸八块”,然后用Heightmap或Quantized-Mesh格式存储,构建了地形瓦片金字塔。这样一来,我们就能更好地组织和管理全球地形数据了。但接下来的问题是:怎么样才能让这些地形瓦片生动地展示出来,让我们仿佛置身于真实的地球之上呢?

视锥体剔除示意图 来源:百度图片


就像我们的眼睛无法一眼看到整个世界一样,在电脑中也不需要同时展示地球的所有地形。我们只需呈现我们能够“看到”的那部分地形即可。这就引出了“视锥体剔除”这一概念。所谓的“视锥体”,就是指相机(或观察者)视野范围内的一个椎体区域,通常被定义为一个六面体,由近裁剪平面、远裁剪平面以及四个侧面组成。视锥体决定了相机能够看见的区域。而“视锥体剔除”则是利用视锥体来确定在视野范围内需要显示的地形区域范围,然后计算需要加载和显示的地形瓦片。对于不在视锥体内的地形区域,则不进行显示。通过“视锥体剔除”的方式,我们可以大大减少不必要显示的地形瓦片区域,从而实现在地图应用中流畅显示全球地形的目标。

图片来源:网络

在地图引擎领域,大多数地图开发工具都采用“视锥体剔除”这种原理,以实现高效加载和显示地形数据。而Mapmost For UE作为其中之一,同样运用了这一原理。作为一款基于虚幻引擎打造的数字孪生底座开发工具,Mapmost For UE是专为数字孪生应用场景而设计。不仅具备实时加载和渲染三维地形瓦片、多种影像数据叠加以及多种地理模型数据的能力,还集成了数据治理、地理人工智能计算、时空分析、可视化分析、场景交互、图层管理等多种功能。欢迎小伙伴们前来体验我们的Mapmost产品,共同打造你心目中的数字孪生应用。

mapmost搭建的数字水利平台图,来源:mapmost

参考

https://www.shuzhiduo.com/A/gGdX94rpz4/

https://www.shuzhiduo.com/A/KE5QDYZkJL/

https://www.itbaoku.cn/post/2875325.html


 关注Mapmost,持续更新GIS、三维美术、计算机技术干货

Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。

欢迎进入官网体验使用:Mapmost——让人与机器联合创作成为新常态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1622688.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux驱动-CCF-0基础

1. 时钟设备 晶振:提供基础时钟源的(可分为有源晶振、无源晶振两种); PLL: 用于倍频的锁相环; mux: 用于多路时钟源选择; Divider: 用于分频的; gate: 用于时钟使能的与门电路等 注册函数…

聚焦数字文创产业!国际数字影像产业园落地成都金牛区

聚焦数字文创产业!又一成都文创产业园落地成都金牛区。在数字文创浪潮中,成都金牛区凭借其前瞻性的视野和战略性的布局,成功吸引了又一成都文创产业园“国际数字影像产业园”的落地,为区域经济的增长和文化产业的升级注入了新的活…

C语言实现二叉树

二叉树 1、完全二叉树的递归创建 #define N 6 typedef char data_type; typedef struct bitree{ int n; data_type data; struct bitree *lchild; struct bitree *rchild; }bitree_t; //创建二叉树 bitree_t *create_bitree(int n){ bitree_t *rootNULL; root(bitree_t*)mallo…

提示词优化的自动化探索:Automated Prompt Engineering

编者按: 作者在尝试教授母亲使用 LLM 完成工作任务时,意识到提示词的优化并不像想象中简单。提示词的自动优化对于经验并不丰富的提示词撰写者很有价值,他们没有足够的经验去调整和改进提供给模型的提示词,这引发了对自动化提示词…

node和go的列表转树形, 执行速度测试对比

保证数据一致性,先生成4000条json数据到本地,然后分别读取文本执行处理 node代码 node是用midway框架 forNum1:number 0forNum2:number 0//执行测试async index(){// 生成菜单列表// const menuList await this.generateMenuList([], 4000);const men…

C++ | Leetcode C++题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> permuteUnique(vector<int>& nums) {dfs(nums, 0);return res;} private:vector<vector<int>> res;void dfs(vector<int> nums, int x) {if (x num…

js的算法-插入排序(直接插入排序)

插入排序 插入排序是一种简单直接的排序方法&#xff0c;其基本思想是每次将一个待排序的记录按其关键字大小插入到前面已经排好序的子序列&#xff0c;直到全部记录插入完成。由插入排序的思想可以引申出三个重要的排序算法&#xff1a; 直接插入排序、折半插入排序和希尔排序…

【书生浦语第二期实战营学习作业笔记(二)】

书生浦语第二期实战营学习作业&笔记(二) 操作文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/helloworld/hello_world.md 基础作业 &#xff1a; 使用 InternLM2-Chat-1.8B 模型生成 300 字的小故事&#xff1a; 八戒部署&#xff08;笔记&#xff0…

【Linux系统编程】第九弹---权限管理操作(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、目录权限 2、粘滞位 总结 1、目录权限 首先提出一个问题&#xff0c;删除一个文件需要什么权限呢&#xff1f;&#xff1f…

竞赛 基于大数据的社交平台数据爬虫舆情分析可视化系统

文章目录 0 前言1 课题背景2 实现效果**实现功能****可视化统计****web模块界面展示**3 LDA模型 4 情感分析方法**预处理**特征提取特征选择分类器选择实验 5 部分核心代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据…

以算力深挖数据应用价值!和鲸助力北京市市场监管数据应用创新竞赛圆满收官!

历时三个多月&#xff0c;北京市市场监管数据应用创新竞赛&#xff08;以下简称“竞赛”&#xff09;圆满收官。本次竞赛旨在挖掘数据的潜在价值&#xff0c;以优化营商环境、智慧监管、高质量发展为核心议题&#xff0c;鼓励参赛者深入结合监管数据&#xff0c;开展精准而深入…

正式退役!波士顿动力Atlas宣布终止研发!

文 | BFT机器人 4月16日&#xff0c;波士顿动力在YouTube上发布了一段Atlas的最新视频&#xff0c;并宣布了Atlas终止研发的消息。 在最后的告别片段中&#xff0c;它依旧完成了奔跑、跳跃、后空翻等动作&#xff0c;甚至连摔倒在地的动作也还是熟悉的滑稽样。Atlas的退役&…

视频美颜SDK原理与实践:从算法到应用

当下&#xff0c;从社交媒体到视频通话&#xff0c;人们越来越依赖于视频美颜功能来提升自己的形象。而视频美颜SDK作为支撑这一技术的重要工具&#xff0c;其原理和实践至关重要。 一、什么是视频美颜SDK&#xff1f; 视频美颜SDK是一种软件开发工具包&#xff0c;用于集成到…

微软发布Phi-3,手机上就能跑,是时候聊聊小型语言模型了|TodayAI

微软公司最近宣布推出了其最新开发的最新AI语言模型&#xff0c;名为Phi-3。这款小型语言模型&#xff08;SLMs&#xff09;在市场上以其卓越的性能和成本效率获得关注&#xff0c;尤其在语言处理、推理、编程及数学基准测试方面表现出色&#xff0c;超越了同等规模甚至更大规模…

Matlab|含多微网租赁共享储能的配电网博弈优化调度

目录 主要内容 结果一览 下载链接 主要内容 首先利用NSGA-II算法求解三个微网的最优充放电策略并做为已知条件代入到双层调度模型中&#xff1b;然后求解双层模型&#xff0c;上层为主动配电网调度模型&#xff0c;下层包括共享储能优化模型和多微网优化调度模型&a…

SPSS软件安装包(亲测可用)

目录 一、软件简介 二、软件下载 一、软件简介 IBM SPSS Statistics是一款功能强大的统计分析软件&#xff0c;广泛应用于各种学术研究、商业决策和政府机构等领域。其强大的数据分析和可视化功能使得用户能够从数据中发现模式、预测趋势&#xff0c;并做出有根据的决策。 SPS…

《系统架构设计师教程(第2版)》第10章-软件架构的演化和维护-02-面向对象软件架构演化过程

文章目录 1. 对象演化1.1 添加一个新对象&#xff08;AO&#xff09;1.2 删除一个对象&#xff08;DO&#xff09; 2. 消息演化2.1 消息2.2 消息演化的操作2.2.1 Add Message(AM)2.2.2 Delete Message (DM)2.2.3 Swap Message Order(SMO)2.2.4 Overturn Message(OM)2.2.5 Chang…

【漏洞复现】泛微e-office系统ajax.php接口存在任意文件上传漏洞

漏洞描述 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件。泛微 E-Office 9.5版本存在代码问题漏洞,泛微e-office系统ajax.php接口存在任意文件上传漏洞 免责声明 技术文章仅供参考,任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存&#xff0c;其实有许多方案可供选择。例如&#xff1a;Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求&#xff0c;但现…

电商技术揭秘三十一:智能风控与反欺诈技术

相关系列文章 电商技术揭秘相关系列文章合集&#xff08;1&#xff09; 电商技术揭秘相关系列文章合集&#xff08;2&#xff09; 电商技术揭秘二十八&#xff1a;安全与合规性保障 电商技术揭秘二十九&#xff1a;电商法律合规浅析 电商技术揭秘三十&#xff1a;知识产权保…