【CesiumJS入门】(1)创建Viewer及相关配置项

news2024/9/23 5:34:31

前言

在上一篇博客中,我们直接在vue组件完成初始渲染并创建 DOM 节点后通过 const map = new Cesium.Viewer('cesiumContainer')构建了一个地球场景。

而本篇,我们将会专门把地球创建的方法写在一个js文件中,以便后续的调用。

同时,本篇会介绍new Cesium.Viewer (container, options )这个构造函数。

Viewer

Viewer - Cesium Documentation

Viewer 是一个场景,这个场景中包含了地球、天空盒、控件等等内容。

new Cesium.Viewer (container, options )

container:地球场景挂载的 DOM 元素或元素 ID
options :包含渲染Cesium场景的可选配置项

options

Cesium.Viewer.ConstructorOptions

const viewerOption = {
  animation: false, // 是否创建动画小器件,左下角仪表
  baseLayerPicker: false, // 是否显示图层选择器
  fullscreenButton: false, // 是否显示全屏按钮
  geocoder: false, // 是否显示geocoder小器件,右上角查询按钮
  homeButton: false, // 是否显示Home按钮
  infoBox: false, // 是否显示信息框
  sceneMode: Cesium.SceneMode.SCENE3D, // 初始场景模式, SCENE2D | SCENE3D | COLUMBUS_VIEW
  sceneModePicker: false, // 是否显示3D/2D选择器
  scene3DOnly: true, // 如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
  selectionIndicator: false, // 是否显示选取指示器组件
  vrButton: false, // vr模式
  timeline: false, // 是否显示时间轴
  navigationHelpButton: false, // 是否显示右上角的帮助按钮
  baselLayerPicker: false, // 将图层选择的控件关掉,才能添加其他影像数据
  shadows: false, // 是否显示背影
  shouldAnimate: true,
  clock: new Cesium.Clock(), // 用于控制当前时间的时钟对象
  imageryProvider: undefined, // 不添加默认影像图层
  selectedImageryProviderViewModel: undefined, // 当前图像图层的显示模型,仅baseLayerPicker设为true有意义
  imageryProviderViewModels: Cesium.createDefaultImageryProviderViewModels(), // 可供BaseLayerPicker选择的图像图层ProviderViewModel数组
  selectedTerrainProviderViewModel: undefined, // 当前地形图层的显示模型,仅baseLayerPicker设为true有意义
  terrainProviderViewModels: Cesium.createDefaultTerrainProviderViewModels(), // 可供BaseLayerPicker选择的地形图层ProviderViewModel数组
  terrainProvider: new Cesium.EllipsoidTerrainProvider(), // 地形图层提供者,仅baseLayerPicker设为false有意义
  fullscreenElement: document.body, // 全屏时渲染的HTML元素,
  useDefaultRenderLoop: true, // 如果需要控制渲染循环,则设为true
  targetFrameRate: undefined, // 使用默认render loop时的帧率
  showRenderLoopErrors: false, // 如果设为true,将在一个HTML面板中显示错误信息
  automaticallyTrackDataSourceClocks: true, // 自动追踪最近添加的数据源的时钟设置
  contextOptions: undefined, // 传递给Scene对象的上下文参数(scene.options)
  mapProjection: new Cesium.WebMercatorProjection(), // 地图投影体系
  dataSources: new Cesium.DataSourceCollection(), // 需要进行可视化的数据源的集合
  creditContainer: document.createElement('div'), // 创建空div,可实现移除版权信息的效果
}

代码

参考代码提交: feat: 新增创建地球场景构造函数 · ReBeX/cesium-tyro-blog - Gitee.com

首先,我们在之前创建的utils文件夹里新建一个js文件 createCesium.js,结合之前写的【WebGIS设计模式】(1)创建地图单例这篇博客,来简单得写一下:

/*
 * @Date: 2023-02-09 14:57:52
 * @LastEditTime: 2023-05-31 17:04:01
 * @FilePath: \cesium-tyro-blog\src\utils\createCesium.js
 * @Description: 创建地图单例
 */
import * as Cesium from 'cesium'

let viewer = {} // 地图对象

const viewerOption = {
  animation: false, // 是否创建动画小器件,左下角仪表
  baseLayerPicker: false, // 是否显示图层选择器
  fullscreenButton: false, // 是否显示全屏按钮
  geocoder: false, // 是否显示geocoder小器件,右上角查询按钮
  homeButton: false, // 是否显示Home按钮
  infoBox: false, // 是否显示信息框
  sceneMode: Cesium.SceneMode.SCENE3D, // 初始场景模式, SCENE2D | SCENE3D | COLUMBUS_VIEW
  sceneModePicker: false, // 是否显示3D/2D选择器
  scene3DOnly: true, // 如果设置为true,则所有几何图形以3D模式绘制以节约GPU资源
  selectionIndicator: false, // 是否显示选取指示器组件
  vrButton: false, // vr模式
  timeline: false, // 是否显示时间轴
  navigationHelpButton: false, // 是否显示右上角的帮助按钮
  baselLayerPicker: false, // 将图层选择的控件关掉,才能添加其他影像数据
  shadows: false, // 是否显示背影
  shouldAnimate: true,
  clock: new Cesium.Clock(), // 用于控制当前时间的时钟对象
  imageryProvider: undefined, // 不添加默认影像图层
  selectedImageryProviderViewModel: undefined, // 当前图像图层的显示模型,仅baseLayerPicker设为true有意义
  imageryProviderViewModels: Cesium.createDefaultImageryProviderViewModels(), // 可供BaseLayerPicker选择的图像图层ProviderViewModel数组
  selectedTerrainProviderViewModel: undefined, // 当前地形图层的显示模型,仅baseLayerPicker设为true有意义
  terrainProviderViewModels: Cesium.createDefaultTerrainProviderViewModels(), // 可供BaseLayerPicker选择的地形图层ProviderViewModel数组
  terrainProvider: new Cesium.EllipsoidTerrainProvider(), // 地形图层提供者,仅baseLayerPicker设为false有意义
  fullscreenElement: document.body, // 全屏时渲染的HTML元素,
  useDefaultRenderLoop: true, // 如果需要控制渲染循环,则设为true
  targetFrameRate: undefined, // 使用默认render loop时的帧率
  showRenderLoopErrors: false, // 如果设为true,将在一个HTML面板中显示错误信息
  automaticallyTrackDataSourceClocks: true, // 自动追踪最近添加的数据源的时钟设置
  contextOptions: undefined, // 传递给Scene对象的上下文参数(scene.options)
  mapProjection: new Cesium.WebMercatorProjection(), // 地图投影体系
  dataSources: new Cesium.DataSourceCollection(), // 需要进行可视化的数据源的集合
  creditContainer: document.createElement('div'), // 创建空div,可实现移除版权信息的效果
}

/**
 * @description: 初始化地球
 * @param {string} target - 地球挂载的div容器
 * @return {*}
 */
class CesiumMap {
  constructor (target, Option = viewerOption) {
    // 首次使用构造器实例
    if (!CesiumMap.instance) {
      this.target = target // Type: Element | String
      this.viewer = new Cesium.Viewer(target, Option)
      this.viewer.imageryLayers.removeAll() // 移除所有图层,只显示蓝色地球

      // 修改场景环境,关闭相关特效
      this.viewer.scene.debugShowFramesPerSecond = true// 显示fps
      this.viewer.scene.moon.show = false// 月亮
      this.viewer.scene.fog.enabled = false// 雾
      this.viewer.scene.sun.show = false// 太阳
      this.viewer.scene.skyBox.show = true// 天空盒
      this.viewer.scene.globe.enableLighting = false // 激活基于太阳位置的光照(场景光照
      this.viewer.resolutionScale = 1.0// 画面细度,默认值为1.0

      viewer = this.viewer
      
      // 将this挂载到CesiumMap这个类的instance属性上
      CesiumMap.instance = this
    }
    return CesiumMap.instance
  }
}

export {CesiumMap, viewer}

好了,然后修改一下App.vue

<script setup>
import { onMounted } from 'vue'
import { CesiumMap } from '@/utils/createCesium.js' // 引入新的类

onMounted(() => {
  new CesiumMap('cesiumContainer') // 创建我们的地球示例
})
</script>

<template>
  <div id="cesiumContainer"/>
</template>

<style scoped>
#cesiumContainer {
  width: 100%;
  height: 100%;
}
</style>

把项目跑起来,我们就会得到一个没有底图,没有控件的地球场景。后续,我们将在这个”纯净“的地球上继续学习CesiumJS的API。
在这里插入图片描述

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

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

相关文章

Filebeat技术栈总结

filebeat 是一个轻量型日志采集器&#xff0c;本质上是一个 agent 。不依赖于任何应用&#xff0c;可以安装在任何节点上&#xff0c;可单独使用 Filebeat 并根据配置读取对应位置的日志进行上报和搜集。 filebeat 内置了常用的 output 组件&#xff0c;例如 kafka、ElasticSe…

电脑硬盘空间大量被占用怎么办?

通常情况下&#xff0c;电脑硬盘空间会被系统文件、已安装的应用程序或个人文件、备份、病毒或其他恶意软件或其他未知文件占用。那我们应该怎样解决硬盘空间大量被占用的问题呢&#xff1f; 方法1&#xff1a;通过存储功能查看内容并释放空间 您可以通过Windows 11/10中的存储…

华为外包待了一年,我离职了...

这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城市选择的问题。而谈到这个问题&#xff0c;就不可避免地会谈到一些关于&#xff1a;机会&#xff1f;技术氛围&#xff1f;跳槽&#xff1f;薪资水平&#xff1f;等等一系列问题。 正好&#xff0c;这也是大家所…

滑动窗口思想(数组)-python

文章目录 前言一、思想二、相关题目讲解1.长度最小的子数组(leetcode 209.)2.水果成篮(leetcode 904.)3.最小覆盖子串(leetcode 76.) 三、 模拟行为螺旋矩阵II(leetcode.59)leetcode 54.螺旋矩阵剑指Offer 29. 顺时针打印矩阵 总结 前言 滑动窗口的精妙之处在于根据当前子序列…

物业管理系统对小区物业的作用太重要了,零代码平台改变原有认知

小区物业处作为业主与小区的沟通场所&#xff0c;经常会遇到缺乏专业人才&#xff0c;导致管理不善、服务不到位&#xff0c;难以为业主提供良好的服务体验&#xff0c;那么拥有一款成熟稳定的物业管理系统就成了物业管理处的重要选择&#xff0c;不仅能为业主带来更好的服务体…

悦灵犀-全新的智能AI工具

最近一段时间&#xff0c;人工智能再次成为人类创新的焦点&#xff0c;不得不说&#xff0c;人工智能正在以一种全新的方式改变人们的生活&#xff0c;这是一个以大模型为核心的人工智能新时代&#xff0c;大模型的出现让千行百业将迎来新的机遇。 悦享星光作为国内高新技术企…

Zinx框架学习 - 构建最基础的Server

Zinx - V0.1 构建最基础的Server Zinx的框架结构&#xff1a; 整体思路&#xff1a; 客户端发送请求到服务器端&#xff0c;服务端会有一个Goroutine专门处理listenner和监听这个过程&#xff0c;然后有客户端连接过来之后会启动一个客户端处理Goroutine&#xff0c;这个Goro…

深度学习 - 52.推荐场景的多样性与 MMR [Maximal Marginal Relevance] 简介与 Python 实现

目录 一.引言 二.多样性 三.MMR 流程 1.标准 MMR 2.窗口 MMR 四.基于向量内积相似度的 MMR Python 实现 1.模拟用户 rank 结果 2.向量内积计算 MRi 2.1 获取向量计算 max sim 2.2 argmax 获取最优 MRi item 3.MMR 测试 4.MMR 完整代码 五.总结 一.引言 MMR - Ma…

记一次k8s节点上出现node.kubernetes.io/disk-pressure污点的问题

目录 问题描述 原因分析&#xff1a; 解决方案&#xff1a; 其他问题 问题描述 k8s部署时pod一直属于Pending状态&#xff0c;也就是说pod未调度到k8s节点上 原因分析&#xff1a; 通过以下命令查看下pod kubectl get pod 以上命令可以看到各个pod的状态&#xff0c…

【商城后台管理系统】项目初始化(UmiJS)

目录 一、运行时配置 1.1 配置方式 1.2 常用配置项 1.3 关于运行时配置说明 二、使用Umi UI 2.1 Umi UI的特性 2.2 项目中安装Umi UI 2.3 使用Umi UI 三、Umi JS总结 3.1 路由状态管理 3.2 配置代理 3.3 封装requset 一、运行时配置 运行时配置和配置的区别是他跑…

Geohash算法原理及实现

最近需要实现一个功能&#xff0c;查找车辆附近的加油站&#xff0c;如果车和加油站距离在200米以内&#xff0c;则查找成功。 加油站数量肯定不小&#xff0c;能否缩小查找范围&#xff0c;否则以遍历形式&#xff0c;效率肯定高不了。 Geohash算法就是将经纬度编码&#xf…

又名管道和无名管道

一、进程间通信&#xff08;IPC&#xff0c;InterProcess Communication&#xff09; 概念&#xff1a;就是进程和进程之间交换信息。 常用通信方式 无名管道&#xff08;pipe&#xff09; 有名管道 &#xff08;fifo&#xff09; 信号&#xff08;signal&#xff09; 共…

数字化时代,低代码+进销存管理系统让你省时省力

进销存系统是一种用于管理企业物资流动和库存的软件系统&#xff0c;可以帮助企业优化物资管理过程&#xff0c;提高效率&#xff0c;减少成本&#xff0c;从而提升企业的盈利能力。本文将详细介绍进销存系统的定义、功能、好处以及如何选择适合自己企业的进销存系统&#xff0…

【嵌入式烧录/刷写文件】-2.6-剪切/保留Intel Hex文件中指定地址范围内的数据

案例背景&#xff1a; 有如下一段HEX文件&#xff0c;保留地址范围0x9140-0x91BF内的数据&#xff0c;删除地址范围0x9140-0x91BF外的数据。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F :2091200078797A7B7C7D7E7F808182838485868788898A…

「ACL 2023」发榜!火山语音推出业内首个借助视频信息的端到端语音翻译模型

日前 ACL 2023的论文录用结果公布&#xff0c;火山语音团队多篇论文成功入选&#xff0c;内容涵盖音频合成、歌声合成以及语音翻译等多个前沿技术领域的创新突破。ACL&#xff08;Annual Meeting of the Association for Computational Linguistics&#xff09;每年由国际计算语…

Nginx服务器及其配置与应用

目录 一、Nginx的特点 1.高并发 2.低消耗 3.低消耗 4.高可用 5.高扩展 6.Nginx与Apache的差异 7.Nginx与Apache的区别 二、Linux中的I/O 1.I/O介绍 2.同步/异步 3.阻塞/非阻塞:关注调用者在等待结果返回之前所处的状态 三、编译安装Nginx服务 1.关闭防火墙&#…

SOLIDWORKS安装使用说明网络版

安装准备 系统要求&#xff1a;参考https://www.solidworks.com/sw/support/SystemRequirements.htmlSolidWorks 2017 是最蕞后一个支持win server 2008 R2 sp1的软件。 SolidWorks 2018支持win server 2012及以上的系统&#xff0c;但不支持win server 2019 SolidWorks 2019…

HNU-计算机系统-CSAPP作业答案

计算机系统CSAPP课后作业答案 计科210X wolf 202108010XXX 第2章 2.61 解: (!~x) || (!x) || (!~(x|0x00ffffff)) || (!(x&0x000000ff)) 或者: (!~x) || (!x) || (!~(x>>24)) || (!(x<<24)) 2.71 A. 实现的是逻辑位移,扩展后前面全是0,不符合符号扩…

Linux常见命令学习

目录 1.ls2.pwd3.cd (change directory)4.touch&&cat&&echo5.mkdir&&rm6.cp&&mv7.man8.less&&vim 1.ls 列出当前目录中包含的文件和目录~ 类似于在windows上双击某个目录&#xff0c;把他打开&#xff0c;看看目录里有啥~ ls -> l…

企业内容管理丨如何解决企业客户签收回执慢,缩短回款周期?

方案应用领域及行业 本方案适用于快消品行业的供应链管理和财务管理 方案应用背景 由于动产物权的政策变化&#xff0c;物权转移从交付时才开始发生效力。也就是说&#xff0c;新政之前&#xff0c;企业发出商品&#xff0c;开出销售发票&#xff0c;即可申请货物回款&#…