【Unity for Cesium、 QGIS】学习笔记

1. 序言

1.1. 资源与参考

1.1.1. 参考声明

参考标号链接
参考1Cesium for Unity Quickstart – Cesium
参考2【Unity3D】Cesium加载大地图 - 知乎
参考3智慧城市之 Cesium For Unity3D 使用教程 第一节 加载Cesium for unity 官方样例_哔哩哔哩_bilibili
参考4如何用QGIS下载高清卫星影像? - 知乎
参考5如何在QGIS中加载高清卫星影像?
参考6【小沐学GIS】QGIS安装和入门使用-CSDN博客
参考7无法连接QGIS插件服务器了,教你手动安装QGIS插件 - 凤凰地理社区
参考8QGIS使用插件下载全球DEM数据 - 知乎
参考9入门指南

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 ionhttps://ion.cesium.com

1.2. 专业名词解释

1.2.1. 不同的影像

  1. 遥感影像

    遥感影像(Remote Sensing Image)是通过非接触式传感器(搭载在卫星、飞机、无人机等平台)捕获的地球(或其他天体)表面的电磁波信号,经处理后形成的可视化图像。简单来说,就是 “从天上拍的地球照片 / 数据图”,但比普通照片包含更丰富的地理、物理、环境等信息,是地理空间数据的核心来源之一。

    按拍摄载体不同可以分为

    平台类型典型载体优势应用场景
    卫星遥感高分系列(中国)、Landsat(美国)、Sentinel(欧盟)覆盖范围广、周期性强、数据稳定全球环境监测、国土普查、气象预报
    航空遥感固定翼飞机、直升机分辨率高、灵活机动城市规划、应急救灾、矿产勘探
    无人机遥感多旋翼 / 固定翼无人机低成本、高分辨率、可近距离观测精细农业、违建核查、小范围测绘
  2. 高程影像

    高程影像(Elevation Image)本质是包含地形高程信息的栅格数据,核心是将地球表面的海拔高度(相对于基准面,如海平面)以像素值的形式存储,形成可视化的 “地形高度图”。简单来说,它是 “能直观看到地形起伏的影像”—— 像素值越大,代表该位置海拔越高,结合色彩映射(如暖色代表高地、冷色代表低地)可快速识别山脉、峡谷、平原等地形特征。

    与普通遥感影像(侧重地物纹理、光谱信息)不同,高程影像的核心价值是提供三维地形数据,是地理空间分析(如坡度计算、淹没范围模拟)和三维建模的基础。

    测量技术原理优势典型应用
    卫星雷达测高(如 SRTM)卫星发射雷达信号,接收地表反射信号,通过时间差计算高程覆盖范围广(全球尺度)、成本低全球地形概览、大范围 GIS 项目
    航空激光雷达(LiDAR)飞机搭载激光传感器,发射激光束扫描地表,精准测量距离精度高(厘米级)、细节丰富城市三维建模、道路设计、防洪规划
    无人机 LiDAR无人机搭载小型 LiDAR 设备,近距离扫描小范围区域灵活、低成本、高分辨率小区三维建模、边坡监测、农业地形分析
    传统地形测量全站仪、GPS 实地测量地形点,手动构建高程模型精度极高(毫米级)、可控性强工程施工放样、高精度测绘项目
  • 区别

    维度高程影像普通遥感影像(如多光谱、可见光)
    核心信息地形高程(Z 值)地物纹理、光谱特征(如植被、建筑)
    数据本质数字高程模型(DEM)的可视化地物电磁波反射的可视化
    核心用途三维地形分析、建模地物识别、变化检测
    典型格式GeoTIFF、HGTGeoTIFF、JPEG2000
    关键参数格网分辨率、高程基准面空间分辨率、光谱波段

1.2.2. 矢量与栅格

矢量数据和栅格数据是 GIS(地理信息系统)的两大核心数据类型,二者特点、用途差异明显,常常用矢量数据画道路,用栅格数据做背景地形底图。

  • 解释

    • 矢量:相当于下面的四边形,记录四个点的位置信息和填充颜色,那么四边形放大或缩小,影响的是四边形填充的像素的多少,不会影响清晰的度

    • 栅格:用固定的像素网格来存储地理信息,图像放大倍数过大会出现“毛边”

      在这里插入图片描述

  • 定义

    类型定义
    矢量数据点、线、面的几何坐标(X,Y)+ 属性信息,表示离散的地理实体(如道路、行政区)。
    栅格数据像素网格(行列矩阵)存储地理信息,每个像素对应一个值(如高程、遥感影像颜色)。
  • 特点对比

    维度矢量数据栅格数据
    数据结构点 / 线 / 面的坐标串 + 属性表像素矩阵(行列号对应值)
    空间精度高(坐标精确,无失真)低(受像素分辨率限制,放大模糊)
    数据量小(仅存实体的关键坐标)大(像素越多数据量越大)
    分析能力擅长拓扑关系、叠加分析(如缓冲区、邻接判断)擅长连续表面分析(如坡度、密度计算)
    适用场景离散实体(道路、建筑、行政区)连续现象(地形、遥感影像、温度分布)
    常用格式离散实体(道路、建筑、行政区)连续现象(地形、遥感影像、温度分布)
  • 实际用途

    • 矢量数据:地图标注(POI 点)、城市规划(建筑 / 道路面)、行政边界管理。
    • 栅格数据:地形分析(高程 DEM)、遥感监测(卫星影像)、气象数据可视化(温度栅格)。

1.3. 项目准备

1.3.1. 示例下载

1.3.2. 运行示例

  1. 导入cesium for unity插件

    在编辑 => 项目设置 => 包管理器添加配置

    • Name:Cesium

    • URL: https://unity.pkg.cesium.com

    • Scope: com.cesium.unity

      在这里插入图片描述

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

      在这里插入图片描述

  2. 打开本地插件

    如果网络不稳定,可以自己去下载com.cesium.unity-1.19.0.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 BuildingsOpenStreetMap 建筑 3D 模型
      Google Photorealistic 3D Tiles实景三维模型瓦片
      Cesium World Terrain全球地形
      Bing Maps Aerial with LabelsBing 航拍 + 地理标签
      Bing Maps RoadBing 道路矢量图
      Sentinel-2Sentinel-2 遥感影像
      Google Maps 2DGoogle 2D 矢量图
      Google Maps 2D Satellite with LabelsGoogle 2D 卫星 + 标签
      Google Maps 2D RoadmapGoogle 2D 道路图
      Google Maps 2D Labels OnlyGoogle 纯标签层
      Google Maps 2D ContourGoogle 等高线

      在这里插入图片描述

      导入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(地理信息系统)中用于定义地理要素空间位置的规则框架,相当于给地图 “定规矩” 的工具。

      主要包含两部分核心信息:

      1. 投影方式:把地球曲面(椭球体)转换为平面地图的数学方法(比如墨卡托投影、高斯 - 克吕格投影);
      2. 基准面 / 椭球体:代表地球形状的数学模型(比如 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版本,我这个版本好像连不上插件商店,这里我就选择手动安装了

  • 下载影像

    • VRT

      VRT(虚拟栅格,Virtual Raster)是 GIS 领域(如 QGIS、ArcGIS)中一种轻量化的栅格数据管理格式,本质是一个 XML 文本文件。它的核心逻辑是:不直接存储栅格数据本身,而是通过记录多个原始栅格文件的路径、坐标、分辨率、投影等元信息,实现虚拟拼接、统一管理栅格数据的效果。

    • 分辨率

      水平 0.5、垂直 0.5代表的是栅格数据的空间分辨率(也叫像元大小),值越小,栅格数据的空间精度越高。栅格数据中每个像元(像素)在地面上对应的实际距离是 0.5 个单位(单位由当前图层的坐标系统决定,图中 CRS 是 EPSG:3857,对应单位是米)。

      在这里插入图片描述

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

    在这里插入图片描述

2.2.2. QGIS下载DEM数据

OpenTopography提供:

  • 高分辨率地形数据集

  • 区域与全球数据集

    • 全球栅格数据集(例如Copernicus / ALOS / SRTM / NASADEM 全球数字高程模型)
    • PGC北极DEM / 南极参考高程模型(REMA)*
    • 美国地质调查局1米 / 1角秒 / 1/3角秒数字高程模型
    • 国际数字高程模型数据集(例如加拿大中分辨率数字高程模型)
  • 这些数据也可从其他来源免费公开获取。

  • 下载插件

    下载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 默认用灰度单色调展示(白色对应高值、黑色对应低值),所以看起来是一片灰。

    • 解决方法:调整渲染样式

      1. 右键图层 => 属性 => 样式

        在这里插入图片描述

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

        在这里插入图片描述

      3. 结果如图

        在这里插入图片描述

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. 影像数据下载

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适用于城市规划、土地管理等场景测试
GitCodeOSGB 倾斜摄影数据通用实景三维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 / 影像数据切片核心原因:
    1. 拆分大文件,避免全量加载卡顿;
    2. 生成多分辨率 LOD 瓦片,兼顾渲染速度与精度;
    3. 适配 WebGL / 三维引擎的瓦片式渲染逻辑;
    4. 按统一坐标系分块,支持全球无缝拼接。

3.2.1. CesiumLab切片

但是,我们项目的模型一般不会传到Cesium ion官网给别人使用,而且项目并补一定在联网环境运行,所以本地资源加载使用场景更多

下载并安装 CesiumLab后,打开 CesiumLab 客户端。

  • 官网:CesiumLab详情介绍 地球可视化实验室.团队致力于提供基础应用开发,助力数字孪生从业者,开发相关业务。

  • 注意:CesiunLab的可视化窗口依赖于浏览器运行,不是传统的pc客户端,如果没有找到,在系统托盘中双击即可

  • CesiunLab数据处理流程图如图

    在这里插入图片描述

  • 地形切片

    从上面的数据处理流程图可以看出我们下载的高程数据要经过地形切片,影像数据要影像切片,矢量数据要矢量切片(我为啥要一个一个的说呢,因为我切错过,还浪费了不少时间)

    • 三角算法

      维度ctbvcg
      适用场景地形数据切片、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 原生相机,核心特点和关键逻辑如下:

  1. 核心定位:基于 Cesium 的地理空间坐标系(WGS84)驱动,支持在全球 / 行星级场景中平滑移动、旋转,解决了 Unity 原生相机在超大坐标下的浮点精度问题(通过局部坐标系动态偏移、双精度浮点计算实现)。
  2. 核心能力
    • 地理空间驱动:可直接绑定经纬度 / 高度(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 数据类型的固有缺陷和引擎的精度保护机制。

    1. float 类型的精度局限

      Unity 中 Transform 组件的 Position、Rotation 等属性基于32 位单精度 float存储,该类型仅能提供约 7 位有效数字。当对象的坐标值(如截图中 X 轴 - 828163.4)超过一定量级时,小数部分的精度会丢失,无法精准表示细微的位置变化。例如,当坐标达到 100 万时,float 的精度步长会变为 0.0625,意味着小于这个值的位置偏移无法被识别。

    2. Unity 的阈值触发机制

      Unity 引擎内置了阈值检测,当对象的世界坐标分量超过约100000(10^5)时,就会弹出该警告。这是因为 Unity 的 Vector3 定义中设置了kEpsilon = 1e-005f的精度阈值,超过该范围后,坐标计算的误差会显著影响物理碰撞、对象渲染、动画插值等功能,可能出现物体抖动、穿模、动画不流畅等问题。

    3. 大场景的精度衰减效应

      即使坐标未直接触发警告,在超大场景中(如千米级、万米级),float 的精度也会逐步衰减。比如坐标在 800 单位时,精度步长约为 61 微米;而到 10000 单位时,步长会扩大到 0.9765 毫米,这种误差在 VR/AR 场景或高精度物理模拟中会被放大,导致视觉和交互异常。

      在这里插入图片描述

  • 相机裁剪问题

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

    在这里插入图片描述

4.1.2. 原点偏移

  • 地理信息的表示

    1. 空间直角坐标系

      如图,z轴和地区轴心重合,x轴在本初子午线的切面,构成空间直角坐标系坐标系来表示地球的地理信息

    2. 经纬度

      如图,在空间直角坐标系的基础上,某个位置与地球球心的连线与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的子场景,下面是参考数值

    地点经度纬度高度
    Boston42.3568-71.058213.53
    Denver39.74-104.99751754.2
    Melboume-37.81144.958376.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 类。
    Cesium3DTilesReader3D Tiles 反序列化,包括 3D Tiles 扩展支持。
    Cesium3DTilesWriter3D Tiles 序列化,包括 3D Tiles 扩展支持。
    Cesium3DTilesSelection3D Tiles 的运行时流、解码、细节级别选择、剔除、缓存管理和解码。
    CesiumAsync多线程异步任务的类。
    CesiumGeometry常见的3D 几何类;和边界测试、交叉测试和空间索引算法。
    CesiumGeospatial椭圆体、变换、投影的3D 地理空间数学类型和函数。
    CesiumGltf轻量级 gITF 处理和优化功能。
    CesiumGltfReadergITF 反序列化/解码,包括gITF扩展支持(KHR_draco_mesh_compression等)。
    CesiumGltfWritergITF 序列化/编码,包括 gITF 扩展支持。
    CesiumlonClient使用 ion 的 REST API访问Cesium ion帐户和3D tilesets 的函数。
    CesiumJsoiReader将JSON 从缓冲区读取到静态类型的类中。
    CesiumJsonWriter将来自静态类型类的JSON 写入缓冲区。
    CesiumUtility用于 JSON 解析、URI处理等的实用函数。

4.2.2. Native编译

4.2.3. 去除水印

4.2.4. 解析国内资源地址

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值