UE5 + Cesium 离线卫星影像与地形加载

UE5 + Cesium 离线数字孪生:卫星影像与地形加载保姆级教程

摘要:本文总结了一套经过验证的标准工作流,手把手教你使用 SAS.Planet、QGIS 和 Docker 处理无字卫星影像与本地地形,并在 UE5 中完美呈现。

🛠️ 核心工具清单
  • 数据下载: SAS.Planet (推荐 Nightly 版本)
  • 数据处理: QGIS (用于切片影像)
  • 地形处理: Docker Desktop + ctb-quantized-mesh
  • 渲染引擎: Unreal Engine 5 + Cesium for Unreal 插件

第一部分:获取“纯净”的卫星影像

很多同学下载的影像带有地名、路网标注,这在数字孪生中非常“出戏”。一旦文字被“烘焙”进图片,后期无法消除。我们需要从源头解决。

1. 正确选择 SAS.Planet 图源

在 SAS.Planet 中,不要使用默认的 Hybrid(混合图)。请严格按照以下步骤操作:

  • 坚决不选: Bing Maps - HybridGoogle - Hybrid(带字,达咩)。
  • 推荐选择: Bing Maps - SatelliteGoogle - Satellite
  • 🌟 专家推荐: Maps -> ESRI -> ArcGIS.Imagery
    (ArcGIS 的影像色彩统一且绝对无字,非常适合做底图。)

2. 导出 GeoTIFF (Stitch 操作)

利用 SAS.Planet 的 Stitch 功能快速导出:

  1. 按快捷键 Ctrl + B 打开 Selection Manager
  2. 切换到 Stitch 选项卡,Output formatGeoTIFF
  3. Map/Overlay layer: 重点!确认选择无字的图源(如 ArcGIS.Imagery)。
  4. Projection: 选择 Geographic (Latitude/Longitude) / WGS84 / EPSG:4326
  5. 点击 Start 开始下载并拼接。

3. QGIS 影像切片 (XYZ Tiles)

将得到的 TIF 文件切成 Cesium 能读取的瓦片:

  1. 将 TIF 文件拖入 QGIS。
  2. 工具箱搜索运行 Generate XYZ tiles (Directory)
  3. 选择输出目录,设置 Zoom levels(推荐 5-11 或更高),运行即可。

第二部分:制作 Quantized Mesh 地形切片

地形数据通常是 DEM TIF 格式。要在 Cesium 中加载,需转换为 Quantized Mesh 格式。推荐使用 Docker

1. 运行 Docker 命令

打开 PowerShell,输入以下命令(假设 D盘 app 目录下有 export.tif):

docker run -it --rm -v D:/app:/data tumgis/ctb-quantized-mesh ctb-tile -f Mesh -l /data/map/linzhi_terrain/layer.json /data/export/export.tif
💡 命令解析:
-v D:/app:/data:将本机 D:/app 映射到容器内的 /data。
-l .../layer.json:指定输出索引文件的位置。

2. 关键修正:修改 layer.json

生成后,必须手动修改 layer.json 文件,否则 UE 本地加载会报 404。

  • 用记事本打开生成的 layer.json
  • 找到 "tiles" 字段,删除 ?v={version} 部分。

修改前: ["{z}/{x}/{y}.terrain?v={version}"]

修改后:

"tiles": ["{z}/{x}/{y}.terrain"]

第三部分:在 Unreal Engine 中组装

1. 加载卫星影像 (Url 设置)

选中 CesiumTileMapServiceRasterOverlay 组件,修改 Url 为本地路径:

file:///D:/app/map/linzhi_satellite_clean/tilemapresource.xml

2. 加载地形 (Url 设置)

添加 CesiumTerrainWebMapTileService 组件,修改 Url 为:

file:///D:/app/map/linzhi_terrain/layer.json
⚠️ 注意: 路径必须以 file:/// 开头,并且使用正斜杠 /

希望这篇教程能帮你解决离线数字孪生的数据问题。