当前位置: 首页 > news >正文

Cesium加载地形

Cesium的地形来源大致可以分为两种,一种是由Cesium官方提供的数据源,一种是第三方的数据源,官方源依赖于Cesium Assets,如果设置了AccessToken后,就可以直接使用Cesium的地形静态构造方法来获取数据源CesiumTerrainProvider.fromIonAssetId,AssetId来自于你自己的Assets库中的id。另外一种则可以通过CesiumTerrainProvider.fromUrl 来实现加载第三方的地形服务。

下面的代码是从上一章节中的代码基础上实现的,集成了下拉选择地形服务的功能。

代码中的各个key,不再移除了,方便诸位复现功能,如果需要正式发布,请自行替换,各个key随时可能到期或被清理。

  • 需要注意的是,对于第三方地形服务部分,我是使用了自己发布的地形服务,如何制作发布,网上有很多教程,一般来说发布后的地址是这样的,末尾以layer.json结束,但是在cesium中使用的时候,需要去掉最后的layer.json,因为Cesium会自动补充。
http://127.0.0.1:9004/tile/terrain/2zxJPMEE/layer.json
  • 我使用的是cesiumlab发布的,还有一个labtoken参数,其实完整的是【…2zxJPMEE/layer.json?labtoken=xx】,这种情况,也是要去掉layer.json后再使用。

  • 还需要注意,在cesium 1.104版本后,地形构造器改为了使用静态方法来获取,而且是异步的,具体的可查看代码中的switchTerrain 方法

<template><div><divref="cesiumContainer"id="cesiumContainer"class="cesium-container"style="width: 100%; height: 100vh;"></div><!--地形切换 --><div class="layer-switcher"><label for="baseMap">选择底图:</label><select id="baseMap" v-model="selectedBaseMap" @change="switchBaseMap"><option value="cesium">Cesium 默认</option><option value="tianditu">天地图</option><option value="gaode">高德地图</option><option value="baidu">百度地图</option></select></div><!-- 地形切换 --><div class="terrain-switcher"><label for="terrain">选择地形:</label><select id="terrain" v-model="selectedTerrain" @change="switchTerrain"><option value="none">无地形</option><option value="cesium">Cesium 官方地形</option><option value="custom">第三方/自定义地形</option></select></div></div>
</template><script setup>
import { onMounted, ref, reactive } from 'vue';
import {BingMapsImageryProvider,BingMapsStyle,Cartesian3,Color,HeadingPitchRange,Ion,Viewer,EllipsoidTerrainProvider,CesiumTerrainProvider
} from "cesium";
import "cesium/Build/Cesium/Widgets/widgets.css";
import CustomBaiduImageryProvider from "../cesium-extensions/BaiduImageryProvider.js";
import { AMapImageryProvider,BaiduImageryProvider,TdtImageryProvider }  from '@cesium-china/cesium-map'
import * as Cesium from "cesium";const cesiumContainer = ref(null)
const viewer = ref(null)
const selectedBaseMap = ref('cesium')
// 地形下拉框选项
const selectedTerrain = ref('none');// 定义各个底图的 ImageryProvider
const imageryProviders = reactive({cesium: [new BingMapsImageryProvider({url: 'https://dev.virtualearth.net',key: 'Rrke5RPh9hmJ32QZoFzP~_KI12m_pz_KbnGoZFmxVFg~Ai7_QidoqYPrWY7Kf1-GR8g9tY5C7BtbjAxOYpeoJNL4Hj66qSgWNOEAZSAlJKFC', // Cesium默认使用Bing Maps,需要替换为你的密钥mapStyle: BingMapsStyle.AERIAL,})],tianditu: [new TdtImageryProvider({style: 'vec', //style: vec、cva、img、cia、ter key:'8af054001cff0f120a2e21c69b4f8c00', // 需去天地图申请}),new TdtImageryProvider({style: 'cva', //style: vec、cva、img、cia、ter key:'8af054001cff0f120a2e21c69b4f8c00', // 需去天地图申请})],gaode: [new AMapImageryProvider({style: 'img', // style: img、elec、cvacrs: 'WGS84' // 使用84坐标系,默认为:GCJ02}),new AMapImageryProvider({style: 'cva', // style: img、elec、cvacrs: 'WGS84' // 使用84坐标系,默认为:GCJ02})],// 使用cesium-map 组件实现/*baidu: [new BaiduImageryProvider({url:"http://online{s}.map.bdimg.com/onlinelabel/?qt=tile&x={x}&y={y}&z={z}&styles=pl&scaler=1&p=1",style: 'normal', // style: img、vec、normal、darkcrs: 'WGS84' // 使用84坐标系,默认为:BD09})],*/// 自定义百度地图提供器baidu:[new CustomBaiduImageryProvider()]
})onMounted(() => {// 设置 Cesium Ion 访问令牌Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJhNmQ5NDYyNi1lZTdhLTRiYTItODFiZi1mYzNiYWNjNDFjMzgiLCJpZCI6NTk3MTIsImlhdCI6MTY2MDE4MDAyNX0.bDTaHEah0hRjUyJWz0hyxIL0Fg63awPXV26OmQ5MCdM'; // 替换为你的访问令牌viewer.value = new Viewer('cesiumContainer', {animation: false, // 移除动画控件timeline: false, // 移除时间轴控件geocoder: false, // 移除地理编码控件homeButton: false, // 移除主页按钮sceneModePicker: false, // 移除场景模式选择器selectionIndicator: false, // 移除选择指示器fullscreenButton: false, // 移除全屏按钮vrButton: false, // 移除 VR 按钮// 默认不设置 terrainProvider,即使用椭球体terrainProvider: new EllipsoidTerrainProvider(),// 默认无地形});// 添加默认实体或其他初始化操作const tiananmenEntity = viewer.value.entities.add({position: Cartesian3.fromDegrees(116.397128, 39.916527),point: { pixelSize: 10, color: Color.RED },name: '天安门',})viewer.value.flyTo(tiananmenEntity,{duration: 3, // 飞行时间,单位秒offset: new HeadingPitchRange(0, // Heading,航向角,0表示正北方向Cesium.Math.toRadians(-80), // Pitch,俯仰角,负值表示向下俯视405000 // Range,距离目标的距离,增加此值以提高视角高度)})
});
const switchBaseMap = () => {// 移除当前的底图图层if (viewer.value && viewer.value.imageryLayers.length > 0) {viewer.value.imageryLayers.removeAll()}let newProviders = imageryProviders[selectedBaseMap.value] || [];for (let i = 0; i < newProviders.length; i++) {viewer.value.imageryLayers.addImageryProvider(newProviders[i])}}// ------------------ 方法:地形切换 -------------------
const switchTerrain = async () => {if (!viewer.value) return;if (selectedTerrain.value === 'none') {viewer.value.terrainProvider = new EllipsoidTerrainProvider();} else if (selectedTerrain.value === 'cesium') {// 从 Ion assetId 加载官方地形viewer.value.terrainProvider = await CesiumTerrainProvider.fromIonAssetId(1, {// requestVertexNormals: true,// requestWaterMask: true,});} else if (selectedTerrain.value === 'custom') {// 从自定义 URL 加载viewer.value.terrainProvider = await CesiumTerrainProvider.fromUrl('http://127.0.0.1:9004/tile/terrain/2zxJPMEE?labtoken=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiItMSxUaHUgQXByIDE4IDE1OjMwOjU3IENTVCAyMDI0In0.j_YKsCRsIQtpgOWfFvMwAP65Rlx9uXyVte_xkE95Vdo',{requestVertexNormals: false,// requestWaterMask: true,})}
};</script><style>
.cesium-container {width: 100%;height: 100%;position: relative;
}
/* 隐藏页面底部的 Cesium logo 和数据归属 */
.cesium-viewer .cesium-widget-credits {display: none !important; /* 隐藏整个 Cesium 控件 */
}/* 隐藏 右上角的 Imagery 和 Navigation instructions */
.cesium-viewer .cesium-viewer-toolbar {display: none !important; /* 隐藏工具栏 */
}.layer-switcher {position: absolute;top: 10px;left: 10px;background: rgba(42, 42, 42, 0.8);padding: 10px;border-radius: 4px;color: white;z-index: 1;
}.layer-switcher select {margin-left: 5px;padding: 2px 5px;border-radius: 2px;border: none;
}/* 地形切换器样式,可以放在旁边或者下方 */
.terrain-switcher {position: absolute;top: 60px;left: 10px;background: rgba(42, 42, 42, 0.8);padding: 10px;border-radius: 4px;color: white;z-index: 10;
}.terrain-switcher select {margin-left: 5px;padding: 2px 5px;border-radius: 2px;border: none;
}
</style>

源码

相关文章:

Cesium加载地形

Cesium的地形来源大致可以分为两种&#xff0c;一种是由Cesium官方提供的数据源&#xff0c;一种是第三方的数据源&#xff0c;官方源依赖于Cesium Assets&#xff0c;如果设置了AccessToken后&#xff0c;就可以直接使用Cesium的地形静态构造方法来获取数据源CesiumTerrainPro…...

gitlab runner正常连接 提示 作业挂起中,等待进入队列 解决办法

方案1 作业挂起中,等待进入队列 重启gitlab-runner gitlab-runner stop gitlab-runner start gitlab-runner run方案2 启动 gitlab-runner 服务 gitlab-runner start成功启动如下 [rootdocserver home]# gitlab-runner start Runtime platform …...

C#对动态加载的DLL进行依赖注入,并对DLL注入服务

文章目录 什么是依赖注入概念常用的依赖注入实现什么是动态加载定义示例对动态加载的DLL进行依赖注入什么是依赖注入 概念 依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,用于解耦软件组件之间的依赖关系。在 C# 开发中,它主要解决的是类与类之间的强耦合问题…...

HDMI接口

HDMI接口 前言各版本区别概述&#xff08;Overview&#xff09;接口接口类型Type A/E 引脚定义Type B 引脚定义Type C 引脚定义Type D 引脚定义 传输流程概述Control Period前导码字符边界同步Control Period 编/解码 Data Island PeriodLeading/Trailing Guard BandTERC4 编/解…...

A/B 测试:玩转假设检验、t 检验与卡方检验

一、背景&#xff1a;当“审判”成为科学 1.1 虚拟场景——法庭审判 想象这样一个场景&#xff1a;有一天&#xff0c;你在王国里担任“首席审判官”。你面前站着一位嫌疑人&#xff0c;有人指控他说“偷了国王珍贵的金冠”。但究竟是他干的&#xff0c;还是他是被冤枉的&…...

第143场双周赛:最小可整除数位乘积 Ⅰ、执行操作后元素的最高频率 Ⅰ、执行操作后元素的最高频率 Ⅱ、最小可整除数位乘积 Ⅱ

Q1、最小可整除数位乘积 Ⅰ 1、题目描述 给你两个整数 n 和 t 。请你返回大于等于 n 的 最小 整数&#xff0c;且该整数的 各数位之积 能被 t 整除。 2、解题思路 问题拆解&#xff1a; 题目要求我们找到一个整数&#xff0c;其 数位的积 可以被 t 整除。 数位的积 是指将数…...

【STM32】LED状态翻转函数

1.利用状态标志位控制LED状态翻转 在平常编写LED状态翻转函数时&#xff0c;通常利用状态标志位实现LED状态的翻转。如下所示&#xff1a; unsigned char led_turn_flag; //LED状态标志位&#xff0c;1-点亮&#xff0c;0-熄灭/***************************************函…...

uniapp 小程序 textarea 层级穿透,聚焦光标位置错误怎么办?

前言 在开发微信小程序时&#xff0c;使用 textarea 组件可能会遇到一些棘手的问题。最近我在使用 uniapp 开发微信小程序时&#xff0c;就遇到了两个非常令人头疼的问题&#xff1a; 层级穿透&#xff1a;由于 textarea 是原生组件&#xff0c;任何元素都无法遮盖住它。当其…...

汽车 SOA 架构下的信息安全新问题及对策漫谈

摘要&#xff1a;随着汽车行业的快速发展&#xff0c;客户和制造商对车辆功能的新需求促使汽车架构从面向信号向面向服务的架构&#xff08;SOA&#xff09;转变。本文详细阐述了汽车 SOA 架构的协议、通信模式&#xff0c;并与传统架构进行对比&#xff0c;深入分析了 SOA 给信…...

Unity-Mirror网络框架-从入门到精通之RigidbodyPhysics示例

文章目录 前言示例一、球体的基础配置二、三个球体的设置差异三、示例意图LatencySimulation前言 在现代游戏开发中,网络功能日益成为提升游戏体验的关键组成部分。本系列文章将为读者提供对Mirror网络框架的深入了解,涵盖从基础到高级的多个主题。Mirror是一个用于Unity的开…...

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…...

H3CNE-12-静态路由(一)

静态路由应用场景&#xff1a; 静态路由是指由管理员手动配置和维护的路由 路由表&#xff1a;路由器用来妆发数据包的一张“地图” 查看命令&#xff1a; dis ip routing-table 直连路由&#xff1a;接口配置好IP地址并UP后自动生成的路由 静态路由配置&#xff1a; ip…...

多线程锁

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种用于控制多个线程对共享资源访问的机制。正确使用锁可以确保数据的一致性和完整性&#xff0c;避免出现竞态条件&#xff08;Race Condition&#xff09;、死锁&#xff08;Deadlock&#xff09;等问题。Java 提供…...

ZooKeeper 核心知识全解析:架构、角色、节点与应用

1.ZooKeeper 分布式锁怎么实现的 ZooKeeper 是一个高效的分布式协调服务&#xff0c;它提供了简单的原语集来构建更复杂的同步原语和协调数据结构。利用 ZooKeeper 实现分布式锁主要依赖于它的顺序节点&#xff08;Sequential Node&#xff09;特性以及临时节点&#xff08;Ep…...

笔记本电脑 选购 回收 特权模式使用 指南

笔记本电脑 factor 无线网卡&#xff1a;有些笔记本无法检测到特定频段的信息&#xff0c;会导致连不上校园网 sudo iwlist wlp2s0 scan | grep Frequency > net.txt cat net.txt>表示用终端输出覆盖后续文件&#xff0c;>>表示添加到后续文件的末尾 一种更简…...

2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一

2023-2024 学年 广东省职业院校技能大赛(高职组“信息安全管理与评估”赛题一&#xff09; 模块一:网络平台搭建与设备安全防护第一阶段任务书任务 1&#xff1a;网络平台搭建任务 2&#xff1a;网络安全设备配置与防护DCRS:DCFW:DCWS:DCBC:WAF: 模块二&#xff1a;网络安全事件…...

C#补充----反射,特性,迭代器,特殊语法,值类型运用类型。

1.反射&#xff1a;通过type 获取类中的数据。创建实例&#xff0c;并赋值。 《1》获取类的方式 《2》反射的应用 <1>获取类型的所有公共成员 <2>获取构造函数 <3>获取类型的 公共成员变量 <4>获取类型的 公共方法 <5>.获取类型的 属性 <6&g…...

深度学习核函数

一、核函数的基本概念 核函数在机器学习中具有重要应用价值&#xff0c;常用于支持向量机&#xff08;SVM&#xff09;等算法中。 核函数是面试中经常被考到的知识点&#xff0c;对于找工作和实际数据转换都有重要作用。 二、数据建模与核函数的作用 数据越多&#xff0c;可…...

Spring MVC流程一张图理解

由于现在项目中大部分都是使用springboot了&#xff0c;但是ssm中的springmvc还是可以了解一下 1 、用户发送请求至前端控制器 DispatcherServlet 。 2 、 DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。 3 、处理器映射器找到具体的处理器 ( 可以根据 xml 配…...

计算机网络速成

前言&#xff1a;最近在做一些动态的crypto&#xff0c;但是配置总搞不好&#xff0c;正好也有学web的想法&#xff0c;就先学学web再回去做密码&#xff0c;速成视频推荐b站建模老哥 目录 计算机网络概述网络的范围分级电路交换网络&#xff08;电路交换&#xff09;报文交换网…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...