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

news2025/4/22 12:27:53

前言

        在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.coloradmin.cn/o/2340098.html

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

相关文章

Java排序算法百科全书:原理、实现与实战指南

一、排序算法全景视图 1. 算法分类体系 graph TDA[排序算法] --> B[比较排序]A --> C[非比较排序]B --> B1[基本排序]B1 --> B11[冒泡排序]B1 --> B12[选择排序]B1 --> B13[插入排序]B --> B2[高效排序]B2 --> B21[快速排序]B2 --> B22[归并排序]B…

开源脚本分享:用matlab处理ltspice生成的.raw双脉冲数据

Author :PNJIE DATE: 2025/04/21 V0.0 前言 该项目旨在使用Matlab处理LTspice的.raw文件,包括动态计算和绘图,部分脚本基于LTspice2Matlab项目: PeterFeicht/ltspice2matlab: LTspice2Matlab - 将LTspice数据导入MATLAB github地址&#x…

(二)mac中Grafana监控Linux上的MySQL(Mysqld_exporter)

框架:GrafanaPrometheusMysqld_exporter 一、监控查看端安装 Grafana安装-CSDN博客 普罗米修斯Prometheus监控安装(mac)-CSDN博客 1.启动Grafana服务 brew services start grafana 打开浏览器输入http://localhost:3000进入grafana登录…

Github中项目的公开漏洞合集

前言 最近在搜CVE的时候,意外发现了GitHub Security Advisories。 可能对一些人来说,已经是老东西了。但我还是第一次见到。 觉得挺好用的,就分享出来。 GitHub Security Advisories GitHub Security Advisories 是 GitHub 提供的一项重要…

蚂蚁全媒体总编刘鑫炜再添新职,出任共工新闻社新媒体研究院院长

2025年4月18日,共工新闻社正式宣布聘任蚂蚁全媒体总编刘鑫炜为新媒体研究院院长。此次任命标志着刘鑫炜在新媒体领域的专业能力与行业贡献再次获得权威机构认可。 刘鑫炜深耕新媒体领域多年,曾担任中国新闻传媒集团新媒体研究院院长、蚂蚁全媒体总编等职…

吴恩达强化学习复盘(2)K-Means初始化|K的选择|算法优化

K-Means初始化 K-Means 算法的第一步是随机选择位置作为初始聚类中心(new one through newk),但如何进行随机猜测是需要探讨的问题。一般需要多次尝试初始猜测,以期望找到更好的聚类结果。 K 值选择及初始聚类中心选取方法 K 值…

SQL优化案例分享 | PawSQL 近日推出 Lateral Join 重写优化算法

一、Lateral 查询语法介绍 Lateral 查询是SQL中的一种连接方式,它允许FROM子句中的子查询引用同一FROM子句中前面的表的列。虽然这种特性提供了强大的表达能力,但在某些场景下可能导致性能问题。PawSQL优化器近日实现了一种针对特定类型Lateral Join的重…

电子电器架构 ---软件定义汽车的电子/电气(E/E)架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧! 旧人不知我近况,新人不知我过…

ONLYOFFICE协作空间3.1发布:虚拟数据房间中基于角色的表单填写、房间模板、改进访客管理等

全新升级的 ONLYOFFICE 协作空间有着约 40 项新功能和改进,将您的文档协作和管理体验提升到全新高度。阅读本文,了解所有优化功能。 关于 ONLYOFFICE ONLYOFFICE 是一个国际开源项目,专注于高级和安全的文档处理,可提供文本文档、…

Docker如何更换镜像源提高拉取速度

在国内,由于网络政策和限制,直接访问DockerHub速度很慢,尤其是在拉取大型镜像时。为了解决这个问题,常用的方法就是更换镜像源。本文将详细介绍如何更换Docker镜像源,并提供当前可用的镜像源。 换源方法 方法1&#x…

示波器探头状态诊断与维护技术指南

一、探头性能劣化特征分析 信号保真度下降 ・时域表现:上升沿时间偏离标称值15%以上(如1ns探头测得≥1.15ns) ・频域特性:-3dB带宽衰减超过探头标称值20%基准稳定性异常 ・直流偏置电压漂移量>5mV(预热30分…

FreeRTOS互斥信号量解决优先级翻转实战教程

FreeRTOS互斥信号量解决优先级翻转实战教程 大家好!今天我们来深入探讨FreeRTOS中的优先级翻转问题,并通过互斥信号量来解决这个问题。上一篇文章我们已经了解了优先级翻转的现象,今天我们将动手实践,通过代码对比来直观感受互斥…

第一篇:从哲学到管理——实践论与矛盾论如何重塑企业思维

引言:当革命哲学照亮现代商业 1937年,毛泽东在战火中写就的《实践论》《矛盾论》,为中国共产党提供了认识世界的方法论。今天,这两部著作正成为企业破解管理困局的“思维操作系统”: 战略模糊:据Gartner统…

14.电容的高频特性在EMC设计中的应用

电容的高频特性在EMC设计中的应用 1. 电容自谐振频率特性对EMC的作用2. 退耦电容的选型3. Y电容选型注意事项4. 储能电容与电压跌落的瞬时中断5. 穿心电容对EMC滤波的作用 1. 电容自谐振频率特性对EMC的作用 电容的高频特性等效模型如下: 其自谐振成因如下&#x…

网络编程4

day4 一、Modbus 1.分类 (1).Modbus RTU: 运行在串口上的协议,采用二进制表现形式以及紧凑型数据结构,通信效率高,应用广泛。(2).Modbus ASCII: 运行在串口上的协议,采用ASCII码传输,并且利用特殊字符作为其字节的开始…

Java 性能优化:如何利用 APM 工具提升系统性能?

Java 性能优化:如何利用 APM 工具提升系统性能? 在当今竞争激烈的软件开发领域,系统性能至关重要。随着应用规模的扩大和用户需求的增加,性能问题逐渐凸显,这不仅影响用户体验,还可能导致业务损失。而 APM…

AI音乐解决方案:1分钟可切换suno、udio、luno、kuka等多种模型,suno风控秒切换 | AI Music API

你有没有觉得,suno风控来了,就要停服了? 你有没有觉得,对接多种音乐模型,让你很疲乏? 你有没有觉得,音乐模型,中文咬字不清楚,让你很苦恼? 别怕&#xff0…

一键升级OpenSSH/OpenSSL修复安全漏洞

在服务器安全运维过程中,我们经常面临这样的问题:收到高危漏洞通报(如最近的OpenSSH多个CVE漏洞),但Ubuntu系统无法通过apt直接升级到修复版本。这种情况下,传统方法需要手动编译源码,处理依赖关…

健康养生,开启新生活

在饮食上,应遵循 “均衡搭配、清淡少盐” 的原则。主食不要只吃精米白面,可适当加入燕麦、糙米等全谷物,为身体补充膳食纤维;每天保证一斤蔬菜半斤水果,深色蔬菜如菠菜、西兰花富含维生素与矿物质,水果则选…

VLAN间通讯技术

多臂路由 路由器使用多条物理线路,每条物理线路充当一个 VLAN 的网管 注意:路由器对端的交换机接口,需要设定 Access 类型,因为路由器的物理接口无法处理 VLAN 标签 。 单臂路由 使用 以太网子接口 (sub-interface) 实现。 …