Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

news/2024/4/27 9:18:15/文章来源:https://blog.csdn.net/linzi19900517/article/details/130198698

Cesium 实战-最新版(1.104.0)通过异步方式初始化地球,加载影像以及高程图层

    • 遇到问题
    • 初始化底图
    • 初始化高程(监听载入完成事件,开启关闭高程)
    • 初始化 3dtile
    • 在线示例

Cesium 最新版(1.104.0)变动还是挺大的,尤其是涉及图层的渲染加载,差不多是重构级别的变化。

Cesium 1.104.0 开始支持并建议使用异步的方式加载渲染图层。


以下是 官方更新 主要说明:

大意是:为了更好的异步流和图层渲染错误处理,自 1.104.0 开始,readyPromise 模式被弃用,并且从 1.107.0 开始会移除此方法

因此,为了体验新版功能,最好还是及时更新影像、高程等初始化方法。

在这里插入图片描述
受影响的主要是图层相关、地形相关、3dtile 相关,如下:

在这里插入图片描述


本文主要介绍一下,新版 Cesium(1.104.0)如何加载影像图、高程数据以及 3dtile 数据。

本文包括:遇到问题、初始化底图、初始化高程(监听载入完成事件,切换高程)、初始化 3dtile 四部分。

提示:想快速了解新版如何 加载图层和高程,可以直接跳转至 初始化底图和初始化高程 查看!


遇到问题

看完官方更新之后,想着直接按照官方示例来修改就行,结果也是遇到一些问题。

由于作者使用的是 TMS 资源,因此之前是使用 new Cesium.TileMapServiceImageryProvider() 的方式来加载图层。

但是现在官方建议是使用 Cesium.TileMapServiceImageryProvider.fromUrl 来加载图层。

在这里插入图片描述

1. 第一个问题:初始化地图时,不能直接使用 imageryProvider 加载图层。

作者本来以为直接替换就行,结果可想而知:图层不会进行渲染!

在这里插入图片描述

在这里插入图片描述

原因也比较简单,因为 imageryProvider 需要的是 ImageryProvider 对象,

TileMapServiceImageryProvider.fromUrl 创建的是 Promise.<TileMapServiceImageryProvider> 对象,因此图层不会渲染。

在这里插入图片描述
在这里插入图片描述

2. 第二个问题:跟图层一样,terrainProvider 直接使用 CesiumTerrainProvider.fromUrl 替换也会出问题。

地形高程不会加载,并且地图会变黑!

原因同加载图层,这里不过多解释。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

还有个需要注意的地方,如果想做版本(1.104.0之前版本)兼容,terrainProviderterrain 属性只能设置一个,否则会提示错误!

在这里插入图片描述

3. 第三个问题:设置开启关闭地形高程问题。

按照以前的方式:

const terrainProvider = viewer.terrainProvider;
// 关闭高程
viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider();
// 开启高程
viewer.terrainProvider = terrainProvider ;

新版环境下,关闭地形比较容易,但是开启有变化,几乎把错都试遍了,比如(以下均不可取,新版方法见下文):

const url = '地形服务地址'// 创建地形高程对象
const terrain = new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(url));
const terrainProvider= new Cesium.CesiumTerrainProvider(url));viewer.terrain = terrainProvider;viewer.terrain = terrain;viewer.terrainProvider = terrain;viewer.terrainProvider = terrain.provider;

初始化底图

Cesium 提供了使用 Promise.<TileMapServiceImageryProvider> 加载图层对象的方法,通过此方法可以直接加载图层。

核心代码(关键是 Cesium.ImageryLayer.fromProviderAsync):

const url = '图层地址'const baseLayer = new Cesium.ImageryLayer.fromProviderAsync(Cesium.TileMapServiceImageryProvider.fromUrl(url,{// 最小级别minimumLevel: 1,// 最大级别maximumLevel: 18,
}))
// 设置监听事件
baseLayer.readyEvent.addEventListener(provider => {console.log(`已经创建 provider! `);provider.errorEvent.addEventListener(error => {console.log(`加载瓦片出错!原因:`, error);});
});
const viewer = new Cesium.Viewer("cesiumContainer", {// Use OpenStreetMapsbaseLayer: baseLayer,// Show Columbus View map with Web Mercator projectionmapProjection: new Cesium.WebMercatorProjection()});

除此之外,也可以通过设置异步方法(async function)来创建 imageryProvider 对象,提供给 viewer 进行初始化。

在这里插入图片描述


初始化高程(监听载入完成事件,开启关闭高程)

1. 初始化地形高程的方式跟图层比较类似。

核心代码(关键是 new Cesium.Terrain):

const url = '地形服务地址'const terrain = new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(url));terrain.readyEvent.addEventListener(provider => {console.log(`已经创建 provider! `);
});const viewer = new Cesium.Viewer("cesiumContainer", {// Use Cesium World Terrainterrain: terrain,// Show Columbus View map with Web Mercator projectionmapProjection: new Cesium.WebMercatorProjection()
});

2. 关于切换地形高程(开启或关闭地形高程)。

由于地形高程加载改为异步,不能再像以前那样直接替换就行。

作者尝试了多次之后,才偶然想到解决办法,之前也是属于走弯路。

核心代码(关键是 terrain.readyEvent):

const url = '地形服务地址'// 创建地形高程对象
const terrain = new Cesium.Terrain(Cesium.CesiumTerrainProvider.fromUrl(url));// 定义 terrainProvider
let terrainProvider;// 创建平面地形
const ellipsoidTerrain = new Cesium.EllipsoidTerrainProvider();// 加载完成之后,记录 terrainProvider 对象
terrain.readyEvent.addEventListener(provider => {terrainProvider = provider;
});const viewer = new Cesium.Viewer("cesiumContainer", {// Use Cesium World Terrainterrain: terrain,// Show Columbus View map with Web Mercator projectionmapProjection: new Cesium.WebMercatorProjection()
});// 分割线 ===================================================================// 切换地形高程
// 关闭高程
viewer.terrainProvider = ellipsoidProvider;
// 开启高程
viewer.terrainProvider = terrainProvider ;

在这里插入图片描述


初始化 3dtile

Cesium 对于 3dtile 加载调整让作者开始有点不适应。

同样,也是异步加载,但是好像没有像图层和高程类那样,提供一个接受者,因此只能使用异步方法(async function)来创建。
在这里插入图片描述

这里需要注意一下,需要用异步方法!

// 使用异步关键字
async function addCesium3DTileset(url,options) {try {const tileset = await Cesium.Tileset.fromUrl(url, options);viewer.scene.primitives.add(tileset);} catch (error) {console.log(`Failed to load tileset: ${error}`);}
}
addCesium3DTileset();

在这里插入图片描述


在线示例

镜像沙盒示例:Cesium 1.104.0 初始化

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

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

相关文章

DIN11系列 大电流输出信号隔离模块线性驱动器0~100mA/0~500mA/0~2A/0-4A

主要特性 精度、线性度误差等级&#xff1a; 0.1、0.2、0.5 级4-20mA/0-5V/0-10V 等标准信号输入0~100mA/0~500mA/0~1A/0-5A 等电流信号输出0~1V(max 5A)/0~10V/0-24V(max 5A) 等电压信号输出信号输入/信号输出 3000VDC 隔离辅助电源&#xff1a;12V、15V 或 24V 直流单电源供…

NeRFStudio系列 Part 1:PipeLines概述

前言&#xff1a;Why NeRFStudio? NeRF社区是近两年来计算机领域最活跃的学术社区之一&#xff0c;各种具有milestone意义的算法层出不穷&#xff0c;各位作者的开源工作也做得非常扎实&#xff0c;非常多的工作都自带了code、data、project page。 但是后继者想要在这些伟大的…

jenkins自动化部署配置

文章目录 1. jenkins 插件安装2. 配置2.1 全局工具配置2.2 全局配置2.2.1 gitee 配置 3. 创建任务添加gitee ssh jenkins 开机自启动 1. jenkins 插件安装 ant Build Failure AnalyzerBuild Monitor ViewBuild Timeout dockerEmail Extension Plugin giteegithubgradle javama…

Python科研数据可视化

在过去的20 年中&#xff0c;随着社会产生数据的大量增加&#xff0c;对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身&#xff0c;所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”&#xff0c;对于数量、规模与复杂性不断增加的数据&…

广域通信网 - 流量控制(停等协议、滑动窗口协议)

文章目录 1 概述2 流量控制协议2.1 停等协议2.2 滑动窗口协议 1 概述 #mermaid-svg-c9cNIYsOvLpoO4AV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-c9cNIYsOvLpoO4AV .error-icon{fill:#552222;}#mermaid-svg-c9c…

跳槽必备,全面总结Android面试知识点

在最近的 Android 开发&#xff08;社招&#xff09;面试中总结的 Android 基础知识点&#xff0c;已经拿到心仪的offer&#xff0c;回馈同学们&#xff0c;感谢其他大佬的分享。 Android中大厂面试都很重视基础知识的考察&#xff0c;面试前不仅要熟悉这些知识点&#xff0c;…

设计模式之访问者模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、访问者模式是什么&#xff1f; 访问者模式是一种行为型的软件设计模式&#xff0c;表示一个作用于某对象结构中的各元素的操作…

智能家居代码架构---简单工厂模式

(11条消息) 智能家居 (10) ——人脸识别祥云平台编程使用(编译libcurl库支持SSL&#xff0c;安装SSL依赖库libssl、libcrypto)openssl 依赖库行稳方能走远的博客-CSDN博客 看上面这个博客的往期文章 代码设计经验的总结&#xff0c;稳定&#xff0c;拓展性更强。一系列编程思…

DAX:概述ALL函数

简单的说&#xff0c;当ALL用作表函数时&#xff0c;忽略应用到表上的任何过滤器&#xff0c;并返回数据表&#xff1b;当ALL用作CALCULATE和CALCULATETABLE函数中修饰器时&#xff0c;ALL函数从扩展表中移除已经应用的过滤上下文。 注意自动存在(auto-eixist)对ALL()函数的影响…

选址-路径问题(Location-Routing Problem, LRP)

今天为大家介绍的是选址-路径问题(Location-Routing Problem, LRP)&#xff0c;首先上目录 目录 问题简介 基础模型、扩展问题及应用 算法 参考文献 1 问题简介 为了更好地了解这个问题&#xff0c;我们不妨当一波老板。 想象一下我们是经营一家口罩生产企业的老板&am…

案例——数据表的基本操作

目录 案例目的&#xff1a; 创建表&#xff1a; 创建offices&#xff1a; 创建employees表&#xff1a; 修改表&#xff1a; 将 employees 的 mobile 字段移动到 officeCode 字段后&#xff1a; 将 birth 字段名称改为 employee_birth: 修改 sex 字段&#xff0c;数据类…

Vue的路由实现:hash模式 和 history模式原理及区别

目录标题 1、hash模式2、history模式 Vue-Router有两种模式: ** hash 模式和 history**模式。默认的路由模式是hash模式。 1、hash模式 简介&#xff1a;hash模式是开发中默认的模式&#xff0c;它的URL带着一个#&#xff0c;例如:http://www.abc.com/#/vue&#xff0c;它的…

Facebook、Google、亚马逊,谁将成为跨境电商的营销宠儿?

跨境电商在全球范围内的发展日益迅猛&#xff0c;而营销渠道的选择也变得越来越多样化。在众多的广告平台中&#xff0c;Facebook、Google和亚马逊被公认为是跨境电商卖家们最主要的营销平台。那么&#xff0c;这三个平台中哪个会成为跨境电商的营销宠儿呢&#xff1f; 一、Fac…

【GIT】git push后长时间没反应

方向一 查看是否添加ssh 打开git bash cd ~/.ssh看是否成功&#xff0c;能成功说明之前生成过&#xff0c;看文件夹下是否有id_rsa.pub和id_rsa文件&#xff0c;有的话跳过生成步骤3 输入 ssh-keygen -t rsa -C ‘your_emailexample.com’(注&#xff1a;your_emailexample.c…

二百左右的蓝牙耳机哪款好?200左右音质最好的蓝牙耳机

在日常生活中离不开智能手机&#xff0c;特别是对无线蓝牙耳机的需求程度也越来越高&#xff0c;但是市面上有很多的蓝牙耳机戴久了耳朵会出现不舒服&#xff0c;为了获得更好的使用体验&#xff0c;我整理了市面上200左右价位佩戴和音质都表现不错的蓝牙耳机。 一、南卡小音舱…

“SCSA-T学习导图+”系列:IPSec VPN原理与应用

本期引言&#xff1a; 本章主要讲解IPSec VPN相关理论概念&#xff0c;工作原理。从安全和加密原理入手&#xff0c;讲解了IPSec 在VPN对等体设备实现的安全特性&#xff0c;如数据的机密性、数据的完整性&#xff0c;数据验证等。重点分析IPSec封装模式&#xff0c;IPSec安全…

【HDCTF2023】wp

【HDCTF2023】wp 文章目录 【HDCTF2023】wpwebWelcome To HDCTF 2023SearchMasterYamiYamiLoginMaster mischardMiscMasterMiscExtremeMiscSuperMisc web Welcome To HDCTF 2023 在源码的 game.js中找到了flag 在控制台输出 console.log(seeeeeeeecret)得flag SearchMaster …

亚马逊美国站带绳窗帘

带绳窗帘 如果您在亚马逊商城发布商品&#xff0c;则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策&#xff08;包括本政策&#xff09;。 本政策涵盖的带绳窗帘 带绳窗帘是一种室内用窗帘&#xff0c;可通过一根吊绳控制升降。此类商品包括但不…

【PR 基础】轨道遮罩键、交叉溶解的简单使用

在上篇博客&#xff08;【PR 基础】裁剪工具的简单使用&#xff09;介绍了裁剪效果的使用&#xff0c;本篇博客在上篇的基础上继续添加 轨道遮罩键、交叉溶解的效果。 效果 步骤 1.可以先将恢复裁剪区域的关键帧删除 2. 接下来添加字幕&#xff0c;点击 新建-》旧版标题 点击…

vue3+ts+pinia+vite一次性全搞懂

vue3tspiniavite项目 一&#xff1a;新建一个vue3ts的项目二&#xff1a;安装一些依赖三&#xff1a;pinia介绍、安装、使用介绍pinia页面使用pinia修改pinia中的值 四&#xff1a;typescript的使用类型初识枚举 一&#xff1a;新建一个vue3ts的项目 前提是所处vue环境为vue3&…