1. 序言
1.1. 资源与参考
1.1.1. 参考声明
1.1.2. 网址合集
| 网址 | 链接 |
|---|---|
| 下载实例项目 | https://github.com/CesiumGS/cesium-unity-samples/releases/tag/v1.19.0 或者 https://cesium.com/downloads/ |
| 下载离线插件包(tgz) | https://cesium.com/downloads/ |
| unity中国官网 | https://unity.cn/releases |
| Cesium for Unity官网 | Cesium for Unity – Cesium |
| Cesium ion | https://ion.cesium.com |
1.2. 专业名词解释
1.2.1. 不同的影像
-
遥感影像
遥感影像(Remote Sensing Image)是通过非接触式传感器(搭载在卫星、飞机、无人机等平台)捕获的地球(或其他天体)表面的电磁波信号,经处理后形成的可视化图像。简单来说,就是 “从天上拍的地球照片 / 数据图”,但比普通照片包含更丰富的地理、物理、环境等信息,是地理空间数据的核心来源之一。
按拍摄载体不同可以分为
平台类型 典型载体 优势 应用场景 卫星遥感 高分系列(中国)、Landsat(美国)、Sentinel(欧盟) 覆盖范围广、周期性强、数据稳定 全球环境监测、国土普查、气象预报 航空遥感 固定翼飞机、直升机 分辨率高、灵活机动 城市规划、应急救灾、矿产勘探 无人机遥感 多旋翼 / 固定翼无人机 低成本、高分辨率、可近距离观测 精细农业、违建核查、小范围测绘 -
高程影像
高程影像(Elevation Image)本质是包含地形高程信息的栅格数据,核心是将地球表面的海拔高度(相对于基准面,如海平面)以像素值的形式存储,形成可视化的 “地形高度图”。简单来说,它是 “能直观看到地形起伏的影像”—— 像素值越大,代表该位置海拔越高,结合色彩映射(如暖色代表高地、冷色代表低地)可快速识别山脉、峡谷、平原等地形特征。
与普通遥感影像(侧重地物纹理、光谱信息)不同,高程影像的核心价值是提供三维地形数据,是地理空间分析(如坡度计算、淹没范围模拟)和三维建模的基础。
测量技术 原理 优势 典型应用 卫星雷达测高(如 SRTM) 卫星发射雷达信号,接收地表反射信号,通过时间差计算高程 覆盖范围广(全球尺度)、成本低 全球地形概览、大范围 GIS 项目 航空激光雷达(LiDAR) 飞机搭载激光传感器,发射激光束扫描地表,精准测量距离 精度高(厘米级)、细节丰富 城市三维建模、道路设计、防洪规划 无人机 LiDAR 无人机搭载小型 LiDAR 设备,近距离扫描小范围区域 灵活、低成本、高分辨率 小区三维建模、边坡监测、农业地形分析 传统地形测量 全站仪、GPS 实地测量地形点,手动构建高程模型 精度极高(毫米级)、可控性强 工程施工放样、高精度测绘项目
-
区别
维度 高程影像 普通遥感影像(如多光谱、可见光) 核心信息 地形高程(Z 值) 地物纹理、光谱特征(如植被、建筑) 数据本质 数字高程模型(DEM)的可视化 地物电磁波反射的可视化 核心用途 三维地形分析、建模 地物识别、变化检测 典型格式 GeoTIFF、HGT GeoTIFF、JPEG2000 关键参数 格网分辨率、高程基准面 空间分辨率、光谱波段
1.2.2. 矢量与栅格
矢量数据和栅格数据是 GIS(地理信息系统)的两大核心数据类型,二者特点、用途差异明显,常常用矢量数据画道路,用栅格数据做背景地形底图。
-
解释
-
矢量:相当于下面的四边形,记录四个点的位置信息和填充颜色,那么四边形放大或缩小,影响的是四边形填充的像素的多少,不会影响清晰的度
-
栅格:用固定的像素网格来存储地理信息,图像放大倍数过大会出现“毛边”

-
-
定义
类型 定义 矢量数据 用点、线、面的几何坐标(X,Y)+ 属性信息,表示离散的地理实体(如道路、行政区)。 栅格数据 用像素网格(行列矩阵)存储地理信息,每个像素对应一个值(如高程、遥感影像颜色)。 -
特点对比
维度 矢量数据 栅格数据 数据结构 点 / 线 / 面的坐标串 + 属性表 像素矩阵(行列号对应值) 空间精度 高(坐标精确,无失真) 低(受像素分辨率限制,放大模糊) 数据量 小(仅存实体的关键坐标) 大(像素越多数据量越大) 分析能力 擅长拓扑关系、叠加分析(如缓冲区、邻接判断) 擅长连续表面分析(如坡度、密度计算) 适用场景 离散实体(道路、建筑、行政区) 连续现象(地形、遥感影像、温度分布) 常用格式 离散实体(道路、建筑、行政区) 连续现象(地形、遥感影像、温度分布) -
实际用途
- 矢量数据:地图标注(POI 点)、城市规划(建筑 / 道路面)、行政边界管理。
- 栅格数据:地形分析(高程 DEM)、遥感监测(卫星影像)、气象数据可视化(温度栅格)。
1.3. 项目准备
1.3.1. 示例下载
-
下载实例项目
发行版 Cesium for Unity Samples v1.19.0 · CesiumGS/cesium-unity-samples
或者在网址Downloads – Cesium下载

-
示例项目
在unity hub中打开项目,发现编译器版本不对,我们需要下载相应的编译器版本才能打开实例项目

去官网下载Unity官方下载_Unity新版_从Unity Hub下载安装 | Unity中国官网(在中国网页往下翻一翻就找到了),

选择在Unity Hub下载,这里自己选择项目需要用到的包,推荐下载个简体中文的资源包支持就好了

-
下载好后打开下面

1.3.2. 运行示例
-
导入cesium for unity插件
在编辑 => 项目设置 => 包管理器添加配置
-
Name:Cesium
-
URL: https://unity.pkg.cesium.com
-
Scope: com.cesium.unity

打开窗口 => 包管理器 => 我的注册表中 ,找到cesium for unity 插件,点击安装即可

-
-
打开本地插件
如果网络不稳定,可以自己去下载
com.cesium.unity-1.19.0.tgz包,下载好后直接打开本地插件即可。-
你可以去官网下载tgz插件包:发行版 · CesiumGS/cesium-unit
-
也可以下载我分享的tgz插件包:

下载后导入

安装好后,顶部菜单栏出现Cesium菜单,可以连接Cesium ion(点击转跳去Cesium官网注册账号),下面还有官方实例场景

这里我允许场景3,可以玩一会机器人,这里可能是渲染关系有问题导致了材质缺少。

-
1.3.3. 新建项目
-
渲染管线
创建 3D (URP) 或 3D (HDRP) 项目,Cesium for Unity 可与通用渲染管线(URP)和高清渲染管线(HDRP)配合使用,但是,它不支持 Unity 的内置渲染器,如果选择 3D 项目作为模板,Cesium 加载的数据集将无法正确渲染。

然后和上面允许示例一样,添加插件即可,Ceisium资源包括基础资源(包括3D空白瓦片、动态相机)和Ceisium ion扩展资源,其中扩展资源需要登录连接Ceisium ion账号才可以使用。
-
Quick Add Basic Assets(基础资源)
基础资源 说明 Blank 3D Tiles 空白的 3D 瓦片容器,用于后续自定义加载 3D 模型数据。 Dynamic Camera 动态相机资源,可实现基于地理空间的相机移动、视角控制。 Cesium Cartographic Polygon 地理多边形工具,用于在地图上绘制区域(如行政边界、自定义范围) -
**Quick Add Cesium ion Assets(**Cesium ion 云端资源)
资源名称 核心内容 Cesium OSM Buildings OpenStreetMap 建筑 3D 模型 Google Photorealistic 3D Tiles 实景三维模型瓦片 Cesium World Terrain 全球地形 Bing Maps Aerial with Labels Bing 航拍 + 地理标签 Bing Maps Road Bing 道路矢量图 Sentinel-2 Sentinel-2 遥感影像 Google Maps 2D Google 2D 矢量图 Google Maps 2D Satellite with Labels Google 2D 卫星 + 标签 Google Maps 2D Roadmap Google 2D 道路图 Google Maps 2D Labels Only Google 纯标签层 Google Maps 2D Contour Google 等高线 
导入Cesium World Terrain 相关的云端资源后大概是大概是这样的

-
2. QGIS
2.1. QGIS入门
地理信息系统(Geographic Information System或 Geo-Information system,GIS)有时又称为“地学信息系统”。它是一种特定的十分重要的空间信息系统。它是在计算机硬、软件系统支持下,对整个或部分地球表层(包括大气层)空间中的有关地理分布数据进行采集、储存、管理、运算、分析、显示和描述的技术系统。
2.1.1. 熟悉软件
-
设置中文

-
面板和工具栏
点击工具栏空白位置出现如图菜单,面板对应左右两侧的窗口,工具栏对应顶部菜单导航栏

-
常用面板
-
工具箱面板
提供 QGIS 内置的所有地理处理工具(如裁剪、缓冲区、叠加分析等),支持搜索和分类筛选工具,是空间分析的核心入口。
-
空间书签管理器面板
用于保存 / 管理地图的特定视图范围(书签),可快速跳转到常用区域,支持导入 / 导出书签列表。
-
浏览器面板
类似文件资源管理器,可浏览本地 / 网络中的地理数据(矢量、栅格、数据库等),支持直接拖放加载数据到项目,还能管理空间书签、Python 脚本等资源。
比如shp文件包含dbf(数据表)、prj(坐标信息)等文件,但是在QGIS浏览器窗口中显示中,显示成一个shp文件(能够区分出矢量,但是不能区分点线面)
-
图层面板
显示当前项目的所有图层,支持开关图层可见性、调整图层顺序、分组管理、设置图层样式等,是项目数据管理的核心面板。

-
-
2.1.2. 坐标系统
-
地理坐标系:为球面坐标。参考平面地是椭球面,坐标单位:经纬度;
-
投影坐标系:为平面坐标。参考平面地是水平面,坐标单位:米、千米等;
地理坐标转换到投影坐标的过程可理解为投影。(投影:将不规则的地球曲面转换为平面)

-
查看使用的坐标系
在设置 => 选项 => CRS处理中我们可以看到默认的坐标系为WGS84
-
CRS: “坐标参考系统(Coordinate Reference System),是 GIS(地理信息系统)中用于定义地理要素空间位置的规则框架,相当于给地图 “定规矩” 的工具。
主要包含两部分核心信息:
- 投影方式:把地球曲面(椭球体)转换为平面地图的数学方法(比如墨卡托投影、高斯 - 克吕格投影);
- 基准面 / 椭球体:代表地球形状的数学模型(比如 WGS84 是全球常用的椭球体基准)。
-
WGS84:
世界大地测量系统 1984(World Geodetic System 1984)” 的缩写,是目前全球最常用的地理坐标系(CRS 的一种)
- 应用场景
-
全球定位:GPS、北斗等卫星导航系统的默认坐标系;
-
遥感 / 卫星数据:大多数卫星影像(如 Google Earth、 Landsat)的原始坐标系;
-
跨区域数据共享:因为是全球通用基准,适合跨国 / 跨洲的地理数据交换。
-
EPSG 代码
WGS84 在国际空间参考系统局(EPSG)中的标准编号,GIS 软件常用这个编号来快速调用该坐标系。

很多国家和地区都有自己的坐标系标准,通过如下操作可以看到我们中国地区的坐标系标准

-
2.1.3. 创建与加载
-
新建工程
依次点击工程 => 新建工程即可创建新工程,窗口标题变为项目标题,并生成对应的qgz项目文件
qgs工程文件和数据的关系:qgis的工程文件只是应用其他路径的文件,相当于软连接。

然后就可以加载在线地图了

-
XYZ Tiles
QGIS官方提供的QGIS.exe可以加载远程地图提供商提供的基于URL格式的XYZ Tiles形式的瓦片地图。如
https://tile.openstreetmap.org/{z}/{x}/{y}.png
地图底图发布服务通常是以瓦片的形式,一种提供调用的方式是按照“行、列、级别”三个参数确定一个瓦片图片,通常是X-列;Y-行;Z-级别。在QGIS中,用这样一个URL表示。如OSM地图的链接如下:
http://rt0.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=0
-
常用的瓦片URL
资源名称 瓦片 URL 模板 坐标系 高德矢量 http://webrd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8GCJ-02(火星) 高德影像 https://webst01.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}GCJ-02 腾讯矢量 http://rt0.map.gtimg.com/realtimerender?z={z}&x={x}&y={-y}&type=vector&style=0GCJ-02 OSM 矢量 https://tile.openstreetmap.org/{z}/{x}/{y}.pngWGS84(EPSG:4326) 百度矢量 http://online0.map.bdimg.com/tile/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&udt=20240101BD-09(百度) 百度影像 http://shangetu0.map.bdimg.com/it/u=x={x};y={y};z={z};v=009;type=sate&fm=ic&app=webearth2&v=009BD-09 天地图矢量 http://t0.tianditu.gov.cn/vec_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=vec&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=密钥WGS84(经纬度) 天地图影像 http://t0.tianditu.gov.cn/img_w/wmts?SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=密钥WGS84 Bing Maps 影像 https://t0.tiles.virtualearth.net/tiles/a{quadkey}.jpeg?g=100WGS84(Web Mercator) -
离线地图服务:URL可以是本地服务,如:http://127.0.0.1:8080/{z}{x}{y}.png
-
2.2. 下载、加载与切片
2.2.1. QGIS下载影像数据
HCMGIS 是一款为QGIS 3.x 及以上版本开发的多功能 GIS 插件,由 Thang Quach 开发维护,集成了底图加载、开源数据下载、批量格式转换等实用功能,是 QGIS 中高效处理地理空间数据的常用工具。
-
手动安装插件
我用的是版本是3.40.12版本,我这个版本好像连不上插件商店,这里我就选择手动安装了
-
下载HCMGIS:QGIS Plugins HCMGIS

-
插件安装
不用解压,直接导入zip安装HCMGIS插件

-
下载影像
-
VRT
VRT(虚拟栅格,Virtual Raster)是 GIS 领域(如 QGIS、ArcGIS)中一种轻量化的栅格数据管理格式,本质是一个 XML 文本文件。它的核心逻辑是:不直接存储栅格数据本身,而是通过记录多个原始栅格文件的路径、坐标、分辨率、投影等元信息,实现虚拟拼接、统一管理栅格数据的效果。
-
分辨率
水平 0.5、垂直 0.5代表的是栅格数据的空间分辨率(也叫像元大小),值越小,栅格数据的空间精度越高。栅格数据中每个像元(像素)在地面上对应的实际距离是 0.5 个单位(单位由当前图层的坐标系统决定,图中 CRS 是 EPSG:3857,对应单位是米)。

下载到本地的影像会自动添加到图层窗口中,而且,加载速度会更快

-
2.2.2. QGIS下载DEM数据
OpenTopography提供:
-
高分辨率地形数据集
-
OpenTopography托管激光雷达数据集(数据地图上红色边框)
-
美国地质调查局3D高程计划(3DEP)(绿色轮廓)
-
NOAA海岸地形激光雷达(蓝色轮廓)
-
社区贡献的数据(紫色轮廓)

-
-
区域与全球数据集
- 全球栅格数据集(例如Copernicus / ALOS / SRTM / NASADEM 全球数字高程模型)
- PGC北极DEM / 南极参考高程模型(REMA)*
- 美国地质调查局1米 / 1角秒 / 1/3角秒数字高程模型
- 国际数字高程模型数据集(例如加拿大中分辨率数字高程模型)
-
这些数据也可从其他来源免费公开获取。
- 美国地质调查局3DEP: https://registry.opendata.aws/usgs-lidar/*
- NOAA海岸激光雷达 : https://registry.opendata.aws/noaa-coastal-lidar/*
- PGC ArcticDEM/REMA : https://www.pgc.umn.edu/data/*
-
下载插件下载OpenTopography DEM Downloader插件并安装,流程和上节一样
-
快捷搜索:QGIS Plugins

安装好后可以在工具窗口看到OpenTopography DEM Downloader工具栏

点击出现弹框,我们需要先注册OpenTopography账号后获取API KEY才能使用,这里的数据源选择非常主要,不同的数据源进度差别有点大,比如30米的就比90米的好很多

-
-
注册账号首次使用该插件需要先注册账号,申请获得API密钥才能下载数据
注册网址:OpenTopography Data
-
获取API KEY在个人主页获取API KEY,将API KEY输入上面的弹框就可以开始使用了
个人主页:myOpenTopo Account

-
使用示例我下载好了DEM数据如下

灰色区域是 QGIS 中高程数据(DEM)的默认灰度渲染效果,并不是数据出错了,主要原因和解决方法如下:
-
核心原因
渲染配置未调整,DEM 数据本质是 “数值栅格”(每个像素代表高程值),QGIS 默认用灰度单色调展示(白色对应高值、黑色对应低值),所以看起来是一片灰。
-
解决方法:调整渲染样式
-
右键图层 => 属性 => 样式

-
切换到 符号系统,将 渲染类型(Render type)从 单波段灰度(Singleband gray)改为 单波段伪彩色(Singleband pseudocolor)。选择一个渐变色带(如 Terrain、Spectral、Viridis 等),应用即可。

-
结果如图

-
-
2.2.3. QGIS下载矢量数据
2.2.4. QGIS切片
-
切片
在工具箱窗口使用GDAL的gdal2tiles工具,然后就可以切片了

-
报错
如果你的DEM 高程数据是 16 位(或 32 位)浮点型 / 整型,但是gdal2tiles(切瓦片工具)只支持 8 位(Byte)的栅格数据,就会报如下错误,需要先通过
gdal_translate将数据缩放到 8 位范围,再切瓦片。
2.3. 矢量与栅格
2.4. 导出与打印
3. 下载和处理
3.1. 数据下载
下面下载的资源都是网上公开的资源,用于切片试验和资源加载试验,有些资源比较烂,没有什么参考价值,你也可以通过其他途径获取这些资源。建议使用QGIS下载,建议使用QGIS下载,建议使用QGIS下载
3.1.1. DEM高程下载
天地图官网:国家地理信息公共服务平台 天地图
地图空间数据云:https://www.gscloud.cn/
-
下载高程数据

-
下载
选择公开数据 => DEM数组高程数据,我们这里以GDEMV3 30M数据为例

进入后,发现可以使用经纬度、数据标识、(条带号和行列号)来搜索资源,但是我们一般获取不到数据标识,所以我们一般通过条带号和行列号搜索资源

我们需要通过高级检索,输入经纬度和数据集,将经纬度转换为条带号,然后再回到资源列表页搜索下载(看到右下角的下载按钮没有,这里可以直接下,可以直接下,可以直接下)

在下载的文件中:
-
ASTGTMV003_N30E103_dem.tif:数字高程模型(DEM)图层,用于表示该区域(北纬 30°、东经 103° 附近)的地形海拔信息。DEM 数据需专业 GIS 软件打开,通过色阶映射显示海拔。
-
ASTGTMV003_N30E103_num.tif:是场景数量(NUM)图层,白色区域代表该像素点由多个 ASTER 影像场景融合生成,数值越高表示数据精度相对更可靠。

-
-
3.1.2. 影像数据下载
-
影像数据下载网络平台
资源平台 网址链接 简介 地理空间数据云 gscloud.cn 国内高分影像 亿景图 o-map.cn/freedata.html 分区域卫星图 对地观测数据网 ids.ceode.ac.cn 2.3 万景公开数据 Copernicus dataspace.copernicus.eu 10 米高分辨率影像 USGS EarthExplorer earthengine.google.com 全球多类影像 GEE code.earthengine.google.com 在线裁剪导出
3.1.3. 倾斜摄影下载
(数据来源于豆包)无人机倾斜摄影 OSGB 格式资源的免费下载渠道主要集中在GitCode 开源社区,还有部分网盘资源可用于学习测试,以下是整理的具体下载站点和资源信息,按资源类型分类呈现:
| 资源来源 | 资源名称 | 内容类型 | 下载地址 | 额外信息 |
|---|---|---|---|---|
| GitCode | 武汉景点倾斜摄影模型 | 城市 / 景区实景三维 | https://gitcode.com/open-source-toolkit/b48b1 | 适用于加载、浏览、简单分析,非商业用途 |
| GitCode | 通用倾斜摄影数据 | 城市 / 建筑模型 | https://gitcode.com/open-source-toolkit/7f1b9 | 压缩包密码:123321,用于格式测试、性能验证 |
| GitCode | 倾斜摄影示例数据 | 小范围示例场景 | https://gitcode.com/open-source-toolkit/7a51b | 支持 SuperMap iDesktop 直接加载,可生成 DSM/DOM |
| GitCode | 倾斜摄影数据 OSGB 格式 | 城市级 / 建筑模型 | https://gitcode.com/Universal-Tool/eb299 | 适用于城市规划、土地管理等场景测试 |
| GitCode | OSGB 倾斜摄影数据 | 通用实景三维 | https://gitcode.com/Open-source-documentation-tutorial/7f613 | 原始数据,适合三维展示、GIS 开发测试 |
| 百度网盘 | 台北市倾斜模型 | 城市级倾斜模型 | 链接:https://pan.baidu.com(提取码:ae9w) | 用于城市建模、地形分析 |
| 百度网盘 | 香港倾斜摄影数据 | 局部区域实景三维 | 链接:https://pan.baidu.com/s/1H0vccV0Zgm2lzA7_qTkHYg(提取码:qqcu) | 含原始 OSGB 数据、3DTiles 转换后数据 |
此外,OS OpenData(https://www.ordnancesurvey.co.uk/opendata)也提供免费的地理信息 OSGB 数据,涵盖地形、地名等基础地理数据,适合学术研究和基础开发测试。
需要注意的是,这些免费资源大多为学习测试用,禁止用于商业项目;若需商业级高精度 OSGB 数据,需通过专业测绘机构或无人机航测服务定制获取。
3.2. 数据切片处理
- DEM / 影像数据切片核心原因:
- 拆分大文件,避免全量加载卡顿;
- 生成多分辨率 LOD 瓦片,兼顾渲染速度与精度;
- 适配 WebGL / 三维引擎的瓦片式渲染逻辑;
- 按统一坐标系分块,支持全球无缝拼接。
3.2.1. CesiumLab切片
但是,我们项目的模型一般不会传到Cesium ion官网给别人使用,而且项目并补一定在联网环境运行,所以本地资源加载使用场景更多
下载并安装 CesiumLab后,打开 CesiumLab 客户端。
-
注意:CesiunLab的可视化窗口依赖于浏览器运行,不是传统的pc客户端,如果没有找到,在系统托盘中双击即可
-
CesiunLab数据处理流程图如图

-
地形切片
从上面的数据处理流程图可以看出我们下载的高程数据要经过地形切片,影像数据要影像切片,矢量数据要矢量切片(我为啥要一个一个的说呢,因为我切错过,还浪费了不少时间)
-
三角算法
维度 ctb vcg 适用场景 地形数据切片、TIN 生成(GIS) 通用三角网格处理(图形学) 核心能力 地形瓦片切割、LOD 分级 网格简化、修复、优化 工具属性 地形专用工具 通用算法库 -
水面文件:用来导入水体(如湖泊、海洋、河流)的边界 / 高程数据文件,后续处理时可以让地形与水面数据融合(比如在地形上渲染出水面效果、计算水陆交界等,(通常是 shp、GeoJSON 这类地理数据格式,或专用的水面高程文件)。
-
叠加全球地形:开启这个开关后,会把当前处理的局部地形数据,与全球范围的基础地形数据做拼接 / 融合,让局部地形能嵌入到全球地形的大场景中(避免局部地形孤立、无全局地理上下文)
-
存储类型:
类型 形式 优势 适用场景 紧凑 单个 .pak压缩包便于传输 / 管理 整体分享、备份结果 散列 多文件分散存储 可单独访问文件 局部调试、修改数据 切片设置:

任务运行完毕后如图,打开预览

可以看到地形了,但是进度和质量有点一言难尽,我们项目中要的资源肯定比这好多了,但是毕竟是免费的,要什么自行车。

给了影像是这个样的

-
-
影像切片
影像切片和高程差不多,就不多说了。
-
切片设置
-
服务类型
维度 WMTS(标准) TMS(社区约定) 制定机构 OGC(国际标准) OSGeo(开源社区) 坐标原点 左上角(Y 向下) 左下角(Y 向上) 兼容性 跨 GIS 软件通用 适合开源 / 自定义场景 部署成本 需专业 GIS 服务器 可通过静态服务部署,成本低 -
投影参数
对比维度 墨卡托 经纬度(以 WGS84 为例) 坐标类型 投影坐标系(平面坐标)**地理坐标系(**球面坐标)表示方式 X/Y(单位:米) 纬度 / 经度(单位:度) 适用场景 Web 地图(如 Google / 高德地图)、Web 端渲染 GPS 定位、卫星数据、全球无变形场景 形状 / 变形情况 低纬度形状较准,高纬度(两极)严重变形 全球无形状变形(球面本身无投影变形) 瓦片适配性 主流 Web 地图瓦片服务(如 WMTS/TMS)的默认格式 适配经纬度规则的瓦片(较少用于 Web 端) 常用 EPSG 代码 EPSG:3857(Web 墨卡托) EPSG:4326(WGS84 经纬度) 切片设置如图

-
-
数据同样一言难尽,给我整笑了,可能是数据源有点问题,大家还是参考QGIS的数据来走一步上面流程吧。

使用QGIS下载影像数据切片后大概是这个样子

-
3.2.2. 倾斜摄影处理
-
下载测试资源
我手上没有现成的倾斜摄影资源,就在网上下载了一个武汉开源的景点的倾斜摄影资源
地址:https://gitcode.com/open-source-toolkit/b48b1
下载解压后,文件如图,里面都是osgb文件,但osgb文件在unity中不能直接使用,我们需要转为3Dtitles

-
处理

处理完毕后,生成了tileset.json文件,并且瓦片变为glb格式的了

-
展示效果
然后我们可以在CesiumLab的分发服务中预览倾斜摄影模型,好像和世界模型有点偏差,倾斜摄影模型在真实的模型的上空,这个问题我还没有找到解决方法。

3.3. 资源加载
3.3.1. 官网资源加载
相当于资源管理,可以从官方资源库添加资源,在项目中联网使用连接Cesium ion就可以使用这些资源

这里我们已波士顿为例,下载对应瓦片

刷新后就可以使用了

双击场景中的瓦片对象就可以将瓦片移动到场景窗口中心,波士顿的瓦片加载出来如图,然后选中动态相机Ctrl + Shift + F,将动态相机与场景窗口视角重合

启动相机,移动相机,可以看到瓦片模型还是不错的,但是我们做项目时还有对模型和地形进行处理和优化

看一下没有3D瓦片时,地图没有3D建筑数据

3.1.2. 本地资源加载
-
高程资源加载
如图,在cesiumlab切片成功后,会自动发布服务在9004断开,我们可以在unity通过URL来访问服务

-
影像资源加载
-
倾斜摄影资源加载
我上面切片后的倾斜影像数据在F:\3D\Resoures\b48b1-main\wuhan文件下

那么我的uRL应该为
F:/3D/Resoures/b48b1-main/wuhan/tileset.json将倾斜摄影影像导入unity(这里的3DTileset可以是随便应该空物体,只要挂载Cesium 3D Tileset组件即可)

效果如图

4. 基础实验
4.1. 相机与场景
4.1.1. 动态相机
Cesium for Unity 中的动态相机是适配地理空间大场景的核心交互组件,专为地球级超大尺度场景设计,区别于 Unity 原生相机,核心特点和关键逻辑如下:
- 核心定位:基于 Cesium 的地理空间坐标系(WGS84)驱动,支持在全球 / 行星级场景中平滑移动、旋转,解决了 Unity 原生相机在超大坐标下的浮点精度问题(通过局部坐标系动态偏移、双精度浮点计算实现)。
- 核心能力:
- 地理空间驱动:可直接绑定经纬度 / 高度(WGS84)控制相机位置,而非 Unity 原生的 XYZ 坐标;
- 平滑交互:内置缓动、插值逻辑,支持相机围绕地形 / 模型聚焦、漫游,适配地球曲率;
- 精度适配:依托 Cesium 的双精度地形渲染,避免相机在远距离 / 大坐标下的抖动、偏移。
-
动态相机自带以下脚本组件
组件名称 核心功能 作用场景 Cesium Camera Controller 控制相机在地理空间中的交互(旋转、缩放、平移) 场景漫游、视角调整 Cesium Globe Anchor将对象绑定到 WGS84 经纬度坐标系,实现地理空间定位 相机 / 物体的地理坐标锚定 Cesium Origin Shift 动态偏移 Unity 世界原点,优化超大场景下的浮点精度 全球 / 行星级大场景 Cesium Fly To Controller控制相机平滑飞行到目标地理坐标(经纬度 / 高度) 场景跳转、点位聚焦 Universal Additional Camera Data 配置 URP 渲染管线的相机渲染参数(抗锯齿、后处理等) Cesium 场景与 URP 管线兼容渲染

-
精度限制
我们在场景中放入一个Cube,但是将相机移动到场景窗口位置却什么也看不到了

此时,发现动态相机精度限制警告,简单来说,这个警告是 Unity 对 “坐标数值过大可能导致精度异常” 的提醒,核心是 float 数据类型的固有缺陷和引擎的精度保护机制。
-
float 类型的精度局限
Unity 中 Transform 组件的 Position、Rotation 等属性基于32 位单精度 float存储,该类型仅能提供约 7 位有效数字。当对象的坐标值(如截图中 X 轴 - 828163.4)超过一定量级时,小数部分的精度会丢失,无法精准表示细微的位置变化。例如,当坐标达到 100 万时,float 的精度步长会变为 0.0625,意味着小于这个值的位置偏移无法被识别。
-
Unity 的阈值触发机制
Unity 引擎内置了阈值检测,当对象的世界坐标分量超过约100000(10^5)时,就会弹出该警告。这是因为 Unity 的 Vector3 定义中设置了kEpsilon = 1e-005f的精度阈值,超过该范围后,坐标计算的误差会显著影响物理碰撞、对象渲染、动画插值等功能,可能出现物体抖动、穿模、动画不流畅等问题。
-
大场景的精度衰减效应
即使坐标未直接触发警告,在超大场景中(如千米级、万米级),float 的精度也会逐步衰减。比如坐标在 800 单位时,精度步长约为 61 微米;而到 10000 单位时,步长会扩大到 0.9765 毫米,这种误差在 VR/AR 场景或高精度物理模拟中会被放大,导致视觉和交互异常。

-
-
相机裁剪问题
如图,如果看不见地图,可能是相机的位置比较远,被裁剪了,可以打开相机剪裁解决。

4.1.2. 原点偏移
-
地理信息的表示
-
空间直角坐标系
如图,z轴和地区轴心重合,x轴在本初子午线的切面,构成空间直角坐标系坐标系来表示地球的地理信息
-
经纬度
如图,在空间直角坐标系的基础上,某个位置与地球球心的连线与x轴正方向夹角,λ为经度,与z轴正方向夹角,Ψ为维度

-
在Cesium Georeference脚本组件中,我们可以自己切换

-
-
原点
在创建的Cesium地球对象中,自带了Cesium Georeference脚本组件,可以放置原点和子场景,点击放置在场景窗口的中间,还可以通过调整组件参数进行位置微调。

如图,我又将波士顿的瓦片加入进来了,然后调整相机,创建Cube并重置世界变换(注意,重置的是unity的世界(全局)坐标原点)。
运行游戏会发现,在游戏窗口利用脚本组件移动相机,场景中的Cube也会发生相应移动,这说明,动态相机的位置为unity的世界(全局)坐标原点位置,动态相机发生变化时,原点也会跟随移动

我们可以使用在学习动态相机时就接触过的组件Cesiun Clobe Anchor,将他添加给Cube,并将Cube移到Cesium Georeference游戏对象下面,就可以使Cube不再随相机移动

4.1.3. 参考子场景
因为区别于单个Cube,我们实际项目中一般有多个模型,这些模型想要固定位置都要通过组件Cesiun Clobe Anchor进行unity世界坐标和经纬度进行实时换算,就会计算资源耗费比较大,造成卡顿。
-
添加子场景

创建Cube,添加红色的材质和Cesium Globe Anchor组件,将Cube放在子场景里面。

-
相机在子场景内,计算和渲染Cube,反正,不计算渲染

-
我在这里遇到的BUG
-
BUG:在子场景中靠进了物体,反而看不到物体
-
原因:
- 子场景的激活判定依赖 “相机到子场景原点的距离”,而非 “相机到物体的距离”;
- 地理坐标的超大数值会导致距离计算的精度误差,使 “实际近距离” 被误判为 “超出激活半径”,触发子场景休眠。
-
解决办法:增加子场景中的
Cesium Sub Scene组件的 Activation Radius(激活半径)
-
4.1.4. 场景切换
-
瓦片下载
主要下载了Boston、Denver、Melboume三个瓦片资源

在不同的场景设置原点,在原点的基础上设置设置半径1000m的子场景,下面是参考数值
地点 经度 纬度 高度 Boston 42.3568 -71.058 213.53 Denver 39.74 -104.9975 1754.2 Melboume -37.81 144.958 376.8 -
UI

-
跳转脚本编写
需要导入CesiumForUnity
-
绑定子场景和偏航、俯角参数

-
按钮事件绑定

-
代码编写
// ... using CesiumForUnity; using Unity.Mathematics; public class FlytoController : MonoBehaviour { // 创建场景的数组 public List<CesiumSubScene> subScenes = new List<CesiumSubScene>(); // 创建姿态 航偏和俯仰 public List<Vector2> subSceneInfo = new List<Vector2>(); // 飞行控制 public CesiumFlyToController cesiumFlyToController; int fly = -1; void Update() { if(fly > -1) { flyToScenes(fly); fly = -1; } } void flyToScenes(int index) { CesiumSubScene subScene = subScenes[index]; // 获取场景 double3 coordinateECEF = new double3(subScene.ecefX, subScene.ecefY, subScene.ecefZ); // 获取经纬度 if (index < subSceneInfo.Count && cesiumFlyToController != null) { Vector2 yawAndPitch = subSceneInfo[index]; // 获取姿态 // 创建飞行 cesiumFlyToController.FlyToLocationEarthCenteredEarthFixed( coordinateECEF, yawAndPitch.x, yawAndPitch.y, true); } } public void FlyToBoston() => fly = 0; public void FlyToDenver() => fly = 1; public void FlyToMelbourne() => fly = 2; }
-
4.2. 功能拓展
4.2.1. Native
Cesium Native 是一组用于3D 地球物理空间的C++库包括
-
3D Tiles运行时流
-
轻量级gITF序列化和反序列化
-
高精度3D地球物理空间数学类型和函数,包括对全球尺寸WGS84椭球体的支持。

-
常见的C++库
C++库 描述 Cesium3DTiles 轻量级 3D Tiles 类。 Cesium3DTilesReader 3D Tiles 反序列化,包括 3D Tiles 扩展支持。 Cesium3DTilesWriter 3D Tiles 序列化,包括 3D Tiles 扩展支持。 Cesium3DTilesSelection 3D Tiles 的运行时流、解码、细节级别选择、剔除、缓存管理和解码。 CesiumAsync 多线程异步任务的类。 CesiumGeometry 常见的3D 几何类;和边界测试、交叉测试和空间索引算法。 CesiumGeospatial 椭圆体、变换、投影的3D 地理空间数学类型和函数。 CesiumGltf 轻量级 gITF 处理和优化功能。 CesiumGltfReader gITF 反序列化/解码,包括gITF扩展支持(KHR_draco_mesh_compression等)。 CesiumGltfWriter gITF 序列化/编码,包括 gITF 扩展支持。 CesiumlonClient 使用 ion 的 REST API访问Cesium ion帐户和3D tilesets 的函数。 CesiumJsoiReader 将JSON 从缓冲区读取到静态类型的类中。 CesiumJsonWriter 将来自静态类型类的JSON 写入缓冲区。 CesiumUtility 用于 JSON 解析、URI处理等的实用函数。

1万+

被折叠的 条评论
为什么被折叠?



