Cesium学习笔记——dem/tif地形的分块与加载

前言

        在Cesium的学习中,学会读文档十分重要!!!在这里附上Cesium中英文文档1.117。

        在Cesium项目中,在平坦坦地球中加入三维地形不仅可以增强真实感与可视化效果,还可以​​提升用户体验与交互性,今天,我们来学习一下如何将dem/tif格式的地形数据进行分块和加载。

一、dem/tif格式数据下载

        DEM(​​Digital Elevation Model​​)是描述地表高程信息的数字模型,通过规则网格或点云数据记录地形起伏,广泛应用于地理信息系统(GIS)、遥感、三维可视化(如Cesium)等领域。

1.1、DEM常见数据格式

  1. GeoTIFF(.tif)​​​​​:地理参考的栅格格式,高程值存储为像素值,元数据(坐标、投影)嵌入文件头。其兼容性强,QGIS、ArcGIS、Python GDAL均支持。 如NASA SRTM数据(30米分辨率)常以GeoTIFF分发。
  2. ASCII Grid(.asc):纯文本格式,以行列数、网格尺寸、高程值矩阵定义地形。
  3. ​​HGT(.hgt):SRTM任务专用格式,每文件覆盖1°×1°区域。
  4. DEM(.dem):USGS标准格式,含头文件(坐标、分辨率)和二进制高程数据。
  5. ​​Point Cloud(.las/.laz):离散点云记录高程,精度极高但需栅格化生成DEM。

1.2、DEM数据的获取

        在国内,我们可以使用地理空间数据云来获取DEM数据。

        地理空间数据云(GSCloud)旨在通过云计算、大数据等技术,解决科研人员在地理空间数据全流程(搜索、获取、分析等)中的需求,推动数据开放共享与高效利用。其服务理念为“开放共享、创新服务”,已发展成为国内最具影响力的地学数据平台之一。

        在左上角的数据集中,我们可以选择想要的DEM类型,然后选择其空间位置,将其下载下来,一般这里的格式为dem或tif,如果是其他格式如img,可以在gis软件中将其转换,方便后续切片的处理。

        下载好的数据直接预览可能一片漆黑,要专业的gis软件预览的效果会好一点。

二、数据切片

        切片是指将​​原始DEM数据​​(如整块GeoTIFF或HGT文件)切割成​​多层级瓦片金字塔​​(Tile Pyramid),每个瓦片(Tile)覆盖特定地理范围和分辨率,按需动态加载,提升性能。

        而全球30米分辨率DEM未经切片的原始数据可能高达数十GB,直接加载会耗尽内存和网络带宽。

        这里,我们使用cesiumlab来进行切片(也可以用gdal+python)。CesiumLab‌是一个基于WebGL技术的3D地理信息系统(GIS)平台,主要用于在浏览器中呈现和分析地理空间数据。它由Cesium平台设计,旨在最大化提升三维数据可视化效率‌。最重要的是,其基础功能基本上免费。

        

        这里,存储类型记得改成散列,在提交处理时,有可能会让你登录,若未登录,点击上面的网站注册一下就好了,然后第一次登录的账号密码就是注册的账号密码,默认密码是手机号后8位。

        切片好的文件夹如下,其中meta是其元数据,我们可以从中获取此DEM的范围等信息。

{"bounds": {"east": 117.00018882751465,"north": 30.00014305114746,"south": 28.99970054626465,"west": 115.99974632263184},"contentType": "quantizedmesh","latLonBounds": {"east": 117.00018882751465,"north": 30.00014305114746,"south": 28.99970054626465,"west": 115.99974632263184},"maxzoom": 14,"minzoom": 0,"proj": 4326,"tiletrans": "tms","type": "terrain","ziped": false
}

三、TerrainProvider的介绍

        在Cesium中,一般使用Cesium.TerrainProvider来加载地形。TerrainProvider是Cesium的一个接口,负责从服务器或本地获取地形瓦片数据。

        它有几个子类,EllipsoidTerrainProvider,CesiumTerrainProvider VRTheWorldTerrainProvider,GoogleEarthEnterpriseTerrainProvider,ArcGISTiledElevationTerrainProvider。其中EllipsoidTerrainProvider是用来加载椭球模型(无真实的地形),CesiumTerrainProvider可以用来加载cesium自带的地形或者是用户的地形,VRTheWorldTerrainProvider支持从VT MAK VR-TheWorld Server服务器请求的高度地图地形图,最后两个是谷歌和ArcGIS的地形。

        这里,我们主要学习用CesiumTerrainProvider加载地形。

四、CesiumTerrainProvider加载默认地形

        在这个文档中,CesiumTerrainProvider不能直接构造地形对象(可能其他的版本不一样),其支持两种格式的地形

  • Quantized Mesh
  • Height Map

        我们上面的切片地形是第一种格式的。

        CesiumTerrainProvider提供了两种加载地形的方法CesiumTerrainProvider.fromIonAssetId 和 CesiumTerrainProvider.fromUrl,其中第一种可以用来加载Cesium的资源,但在这之前,记得先申请一个Ion。Cesium.Ion.defaultAccessToken =‘你的Ion’

        其有两个参数,第一个是资源id,比如说地形是1,第二个是对象,其有如下参数,第一个是真实的地球光照,第二个是水的渲染,但是需要从服务器获取。

  let terrainProvider1 = Cesium.CesiumTerrainProvider.fromIonAssetId(1, {requestVertexNormals: true,requestWaterMask: true,});viewer.terrainProvider = terrainProvider1;

        效果如下,但是默认的地形受网络影响大,有时候加载不出来。

五、CesiumTerrainProvider加载本地地形

5.1、直接加载

        本地地形则是通过CesiumTerrainProvider.fromUrl函数来加载。它的参数也和上面的类似,但是第一个路径需要是相对路径,在本地Cesium无法读取绝对路径。

        注意这个路径所在文件夹terrain是打开里面一个有json文件的文件夹,这里我把terrain放在public里。

  let terrainProvider = Cesium.CesiumTerrainProvider.fromUrl('/terrain',);viewer.terrainProvider = terrainProvider;

5.2、服务器代理加载 

        但是上面那种方法无法用于实际生产,因为我们切片的目的就是提高性能,减少页面体积,如果直接放在public里,这些地形切片会直接和前端页面一起全部发送给浏览器,相当于没有解决问题。

        而且,这些地形通常是不变的静态数据,因此我们可以用一个服务器来进行发布。这里,我用nginx,也可以用python,tomcat等。

        我们先去nginx官网下载一个nginx。下载好后,其目录结构如下。terrain是我们的切片地形,需要我们复制过来(terrain1是我的另一个)。

        接下来,我们要对其进行代理配置,进入第一个文件夹,里面有一个nginx.conf文件,这是其配置文件。其配置内容大概如下。

  • ‌全局块(main)‌:设置工作进程数(worker_processes auto;匹配CPU核心数)、错误日志路径及级别(建议生产环境用warn级别)‌
  • events块‌:定义连接处理模型(如use epoll;优化Linux性能)、单个进程最大连接数(高并发场景需调高worker_connections)
  • http块‌:包含全局HTTP设置(如MIME类型、日志格式)、多个server虚拟主机配置‌ ‌
  • server块‌:定义监听端口(listen 80;)、域名(server_name)、访问控制规则,内部嵌套location路径匹配规则

        这里,我们要配置的是server这一块,其默认端口号为 80,这里我改成了9999。

        然后就是location路径匹配规则,root里面的是根路径,如何不修改,nginx默认访问的就是这个文件夹,这里要改成我们代理的文件夹terrain。

        atuoindex on在Nginx配置中用于开启目录浏览功能。当设置autoindex on时,Nginx会在访问指定目录时显示该目录下的文件列表,类似于文件管理器中的目录浏览功能,这里我们要开启才能访问我们的资源。

        最后就是一些跨域请求问题,全部允许。

    server {listen       9999;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   terrain;autoindex on;# 支持跨域add_header Access-Control-Allow-Origin *;add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';}

         最后点击nginx.exe启动,浏览器访问http://localhost:9999/就可以访问到文件里面的内容。

        最后,将这个路径填入即可。

  let terrainProvider = Cesium.CesiumTerrainProvider.fromUrl('http://localhost:9999/',);viewer.terrainProvider = terrainProvider;

        最后效果如下,如果大家喜欢我的文章的话,请点一个免费的赞和关注吧!

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

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

相关文章

Spring Boot 断点续传实战:大文件上传不再怕网络中断

精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、痛点与挑战 在网络传输大文件(如视频、数据集、设计稿)时,常面临: 上传中途网络中断需重新开始服务器内…

数码管LED显示屏矩阵驱动技术详解

1. 矩阵驱动原理 矩阵驱动是LED显示屏常用的一种高效驱动方式,利用COM(Common,公共端)和SEG(Segment,段选)线的交叉点控制单个LED的亮灭。相比直接驱动,矩阵驱动可以显著减少所需I/…

【上位机——MFC】菜单类与工具栏

菜单类 CMenu,封装了关于菜单的各种操作成员函数,另外还封装了一个非常重要的成员变量m_hMenu(菜单句柄) 菜单使用 添加菜单资源加载菜单 工具栏相关类 CToolBarCtrl-》父类是CWnd,封装了关于工具栏控件的各种操作。 CToolBar-》父类是CC…

liunx中常用操作

查看或修改linux本地mysql端口 cat /etc/my.cnf 如果没有port可以添加,有可以修改 查看本地端口占用情况 bash netstat -nlt | grep 3307 HADOOP集群 hdfs启动与停止 # 一键启动hdfs集群 start-dfs.sh # 一键关闭hdfs集群 stop-dfs.sh #除了一键启停外&#x…

衡石chatbi如何通过 iframe 集成

iframe 集成方式是最简单的一种&#xff0c;您只需要在您的 HTML 文件中&#xff08;或 Vue/React 组件中&#xff09;添加一个 iframe 元素&#xff0c;并设置其 src 属性为 AI 助手的 URL。 <iframesrc"https://develop.hengshi.org/copilot"width"100%&q…

Java集合框架深度解析:HashMap、HashSet、TreeMap、TreeSet与哈希表原理详解

一、核心数据结构总览 1. 核心类继承体系 graph TDMap接口 --> HashMapMap接口 --> TreeMapSet接口 --> HashSetSet接口 --> TreeSetHashMap --> LinkedHashMapHashSet --> LinkedHashSetTreeMap --> NavigableMapTreeSet --> NavigableSet 2. 核心特…

HTTP 1.0 和 2.0 的区别

HTTP 1.0 和 2.0 的核心区别体现在性能优化、协议设计和功能扩展上&#xff0c;以下是具体对比&#xff1a; 一、核心区别对比 特性HTTP 1.0HTTP 2.0连接方式非持久连接&#xff08;默认每次请求新建 TCP 连接&#xff09;持久连接&#xff08;默认保持连接&#xff0c;可复用…

gnome中删除application中失效的图标

什么是Application 这一块的东西应该叫application&#xff0c;准确来说应该是applications。 正文 系统级&#xff1a;/usr/share/applications 用户级&#xff1a;~/.local/share/applications ying192 ~/.l/s/applications> ls | grep xampp xampp.desktoprm ~/.local…

OpenFeign 使用教程:从入门到实践

文章目录 一、什么是 OpenFeign&#xff1f;1、什么是 OpenFeign&#xff1f;2、什么是 Feign&#xff1f;3、OpenFeign 与 Feign 的关系4、为什么选择 OpenFeign&#xff1f;5、总结 二、OpenFeign 的使用步骤1. 导入依赖2. 启用 OpenFeign3. 配置 Nacos 三、FeignClient 参数…

蓝桥杯 16.对局匹配

对局匹配 原题目链接 题目描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分&#xff0c;代表他的围棋水平。 小明发现&#xff0c;网站的自动对局系统在匹配对手时&#xff0c;只会将积分差恰好是 K 的两名用户匹配在一起。如果两人分差小…

C#常用LINQ

在开发时发现别人的代码使用到了LINQ十分便捷且清晰&#xff0c;这里记录一下常用LINQ和对应的使用。参考链接&#xff1a;LINQ 菜鸟教程 使用的学生类和字符串用于测试 public class Student {public int StudentID;public string StudentName;public int Age; }Student[] st…

单例模式(线程安全)

1.什么是单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有单…

Python 之 __file__ 变量导致打包 exe 后路径输出不一致的问题

现象 做项目的时候&#xff0c;一直使用 os.path.dirname(os.path.abspath(__file__)) 来获取当前目录。然而&#xff0c;最近却遇到了一个路径相关的问题。直接运行 py 文件是正常的&#xff0c;但是打包成 exe 之后&#xff0c;却显示因为路径问题导致程序报错无法继续执行。…

PH热榜 | 2025-04-21

1. Google Whisk 2.0 标语&#xff1a;将图像转换为八秒的动画短片。 介绍&#xff1a;Whisk 是谷歌实验室的一项新创新&#xff0c;现在推出了 Whisk Animate——它可以将你的图片转换成生动的8秒视频&#xff0c;采用了 Veo 2 技术。此功能现已在60多个国家的 Google One A…

AI大模型 —— 国产大模型 —— 华为大模型

有这么一句话&#xff0c;那就是AI大模型分两种&#xff0c;一种是大模型&#xff1b;另一种是华为大模型。 如果从技术角度来分析&#xff0c;华为的技术不论是在软件还是硬件都比国外的大公司差距极大&#xff0c;甚至有些技术评论者认为华为的软硬件技术至少落后2.5代&#…

FPGA 中 XSA、BIT 和 DCP 文件的区别

在 FPGA&#xff08;现场可编程门阵列&#xff09;开发中&#xff0c;XSA、BIT 和 DCP 文件是常见的文件类型&#xff0c;它们在功能、用途、文件内容等方面存在明显区别&#xff0c;以下是详细介绍&#xff1a; 1. XSA 文件 定义与功能 XSA&#xff08;Xilinx Shell Archiv…

MH2103系列coremark1.0跑分数据和优化,及基于arm2d的优化应用

CoreMark 1.0 介绍 CoreMark 是由 EEMBC&#xff08;Embedded Microprocessor Benchmark Consortium&#xff09;组织于 2009 年推出的一款用于衡量嵌入式系统 CPU 或 MCU 性能的标准基准测试工具。它旨在替代陈旧的 Dhrystone 标准&#xff08;Dhrystone 容易受到各种libc不同…

云原生与AI的关系是怎么样的?

云原生与AI的结合正在重塑现代应用的开发与部署模式&#xff0c;两者相辅相成&#xff0c;共同推动技术创新与产业升级。以下是两者的核心概念、结合点及未来趋势的详细解析&#xff1a; 一、云原生与AI的核心概念 云原生&#xff08;Cloud Native&#xff09; • 定义&#…

【CentOs】构建云服务器部署环境

(一) 服务器采购 2 CPU4G 内存40G 系统盘 80G 数据盘 (二) 服务器安全组和端口配置 (三) 磁盘挂载 1 登录 root 2 查看目前磁盘使用情况 df -h 3 查看磁盘挂载情况 识别哪些磁盘没挂载 fdisk -l 4 对未挂载磁盘做分区 fdisk /dev/vdb 输入m&#xff0…

LangChain4j语言模型选型指南:主流模型能力全景对比

LangChain4j语言模型选型指南&#xff1a;主流模型能力全景对比 前言 在大语言模型应用开发中&#xff0c;选择合适的底层模型提供商是架构设计的关键决策。LangChain4j作为Java生态的重要AI框架&#xff0c;其支持的20模型提供商各有独特的优势场景。本文通过功能矩阵深度解…