Cesium 入门

news2025/1/16 21:13:18

文章目录

  • 一、了解 Cesium
  • 二、创建第一个 Cesium 地球
  • 三、案例
    • 1. Cesium 查看器、场景、实体、数据源介绍
    • 2. Cesium 的坐标与转换
    • 3. Cesium 相机系统
      • 方法一:setView
      • 方法二:flyTo
      • 方法三:lookAt
      • 方法四: viewBoundingSphere
  • 四、案例
    • 1. 地月共存
  • 五、其他

token Token

一、了解 Cesium

首先要了解Cesium是什么。

  • Cesium是一种基于Web的三维地图引擎,可用于构建交互式虚拟地球应用程序。您可以访问Cesium官方网站 http://cesium.com 了解更多信息。

以下是一些中文版学习Cesium的网站:

  • Cesium中文网:http://cesium.xin/ (提供了一些中文的Cesium教程和示例,也有一些Cesium使用案例)
  • Cesium官方文档中文版:https://cesium.com/docs/cesiumjs-ref-doc/ (官方中文文档,详细说明了Cesium的API和用法)

Cesium 主要功能介绍

  1. 通过 CZML创建数据驱动的时间动态场景
  2. 使用 WMS,TMS,ESRI等标准绘制影像图层
  3. 具有高分辨率的地形三维,可以清晰地展示各种连绵起伏的山脉
  4. 具有采用 KML,GeoJson,TopoJson 格式的数据进行适量绘制的功能
  5. 使用 COLLADA和glTF绘制三维模型
  6. 可以调用 WebGL 的低级图元进行集合体的渲染
  7. 可以在地球上绘制广告牌、标签、文本、折线、多边形等
  8. 通过调整摄像机角度来创建随着时间变化的物体移动路径
  9. 具有点云高速渲染的功能
  10. 动态调整地球色调与亮度对比度
  11. 具有热力图功能
  12. 具有地形等高线与等高线自定义颜色功能
  13. 在球体上绘制柱状图的功能

二、创建第一个 Cesium 地球

  1. 进入官网: http://cesium.com
  2. 点击 PlatForm ——> downloads
    在这里插入图片描述
  3. 点击下载(PS:如果下载慢可以试试迅雷或Neat Download Manager下载)
    在这里插入图片描述
  4. 在本地新建文件夹,将下载好的文件放入自己建的目录下,如下图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  5. 新建一个 html 文件
<!--
 * @Description: file content
 * @Version: 2.0
 * @Autor: Hu Kang
 * @Date: 2023-04-25 17:21:07
 * @LastEditors: Hu Kang
 * @LastEditTime: 2023-04-25 17:38:06
 * @FilePath: \src\learnCesium\learn01.html
-->
<!DOCTYPE html>
<html lang="en">
	
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>cesiumm 第一课</title>
  <script src="../../libs/Cesium/Cesium.js"></script>
  <link rel="stylesheet" href="../../libs/Cesium/Widgets/widgets.css">
  <!-- 使得cesium将窗口铺满 -->
  <style>
    html,
    body {
      margin: 0;
      padding: 0;
    }
  </style>
</head>

<body>
  <div id="cesiumContainer"></div>
  <script>
    Cesium.Ion.defaultAccessToken = '你申请的token'
    const viewer = new Cesium.Viewer('cesiumContainer')
  </script>
</body>
</html>

三、案例

1. Cesium 查看器、场景、实体、数据源介绍

  1. Viewer:主要窗口

    • Cesium 展示三维要素内容的主要窗口,包含三维地球的视窗,还包含了一些基础控价
    • const viewer = new Cesium.Viewer('div的ID',{ options可选参数 },包括图层)
    • options可选参数
      • animation: false, 隐藏动画效果
      • timeline:false, 隐藏时间轴
      • 等等
  2. Scene:场景类

    • viewer.scene.globe.show = false,隐藏地球图层
  3. Entity:实体类
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>cesiumm 第一课</title>
      <script src="../../libs/Cesium/Cesium.js"></script>
      <link rel="stylesheet" href="../../libs/Cesium/Widgets/widgets.css">
      <!-- 使得cesium将窗口铺满 -->
      <style>
        html,
        body {
          margin: 0;
          padding: 0;
        }
    
      </style>
    </head>
    
    <body>
      <div id="cesiumContainer"></div>
      <script>
        Cesium.Ion.defaultAccessToken = '你申请的token'
        const viewer = new Cesium.Viewer('cesiumContainer', {
          animation: false,
          timeline: false
        });
        // 地球图层的显示
        viewer.scene.globe.show = true;
    
      /*
         // 相机的视口方向进行设置
         viewer.scene.cemera.setView({
          // 对相机位置的经度、维度、和高度进行设置
          destination: Cesium.Cartesian3.fromDegrees(116.39, 39.9, 1500)
        }) 
      */
    
      const entity = viewer.entities.add({
        position: Cesium.Cartesian3.fromDegrees(116.39,39.91,400),
        point:{
          pixelSize:100,
          color:new Cesium.Color(0,1,0,1)
        }
      })
      viewer.trackedEntity = entity;
      </script>
    </body>
    </html>
    
  4. DataSourceCollection:数据源集合类
    是 Cesium 中加载矢量数据的主要方式之一,最大的特点是支持加载矢量数据集和外部文件的调用,主要有三种调用方式:分别为 CzmlDataSource,kmlDataSource,GeoJsonDataSource,分别代表加载Czml格式、kml格式和GeoJson格式数据,在 GIS 开发中加载矢量数据是必不可少的功能
    在这里插入图片描述

    viewer.GeoJsonDataSource.load("../../libs/sampleData/ne_10m_us_states.topojson")
    

2. Cesium 的坐标与转换

主要是将三维模型绘制在三维坐标上,Cesium 一共有以下五种坐标系

  1. WGS84经纬度坐标系(没有实际的对象)

  2. WGS84弧度坐标系(Cartographic)
    构造 Cartographic 对象:new cesium.Cartographic(longitude,latitude,height),参数分别为经度、维度、高度
    角度和弧度的换算:弧度 = Π/180 x 经纬度角度
    经纬度角度 = 180/Π x 弧度

  3. 笛卡尔空间直角坐标系(Cartesian3)
    以空间中O点为原点,建立三条两两垂直的数轴。笛卡尔空间直角坐标系的原点就是椭球的中心
    构造 Cartesian3 对象:new Cesium.Cartesian3(x,y,z),分别代表X,Y,Z,三根数轴上的值

  4. 屏幕坐标系(Cartesian2)
    也叫平面坐标系,是一个二维的笛卡尔坐标系,屏幕左上角为原点,屏幕水平方向为X轴,垂直方向为Y轴,向下为正。
    构造 Cartesian2 对象:new Cesium.Cartesian3(x,y,),分别代表X,Y,两根数轴上的值

  5. 4D笛卡尔坐标系(Cartesian4)

3. Cesium 相机系统

方法一:setView

setView 通过定义相机飞行目的地的三维坐标和视线方向,将视角直接切换到所设定的视域范围内,设置一个常量,用于存储飞行的目的地的坐标,使用相机中的setView方法中的destination 属性用于设定相机的目的地

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>cesiumm 第一课</title>
  <script src="../../libs/Cesium/Cesium.js"></script>
  <link rel="stylesheet" href="../../libs/Cesium/Widgets/widgets.css">
  <!-- 使得cesium将窗口铺满 -->
  <style>
    html,
    body {
      margin: 0;
      padding: 0;
    }

  </style>
</head>

<body>
  <div id="cesiumContainer"></div>
  <script>
    Cesium.Ion.defaultAccessToken = '你申请的token'
    const viewer = new Cesium.Viewer('cesiumContainer', {
      animation: false,
      timeline: false
    });
    // 地球图层的显示
    viewer.scene.globe.show = true;
    
    // 控制相机
    const position = Cesium.Cartesian3.fromDegrees(116.39, 39.91, 400);
    viewer.camera.setView({
      destination: position, // 设定相机的目的地
      orientation: { // 设定相机视口的方向
        // 控制视口方向的水平旋转,也就是沿着Y轴旋转,当数值为0时代表正北方向
        heading: Cesium.Math.toRadians(0),
        // pitch 控制视口的上下旋转,即沿X轴进行旋转,当数值为-90 ,表示俯视朝向地面
        pitch: Cesium.Math.toRadians(-90),
        // roll 控制视口的翻转角度,沿着Z轴进行旋转,数值为0,表示不翻转
        roll: 0
      }
    })

  </script>
</body>

</html>

在这里插入图片描述

方法二:flyTo

flyTo 具有空中飞行逐步切换视域的效果,还可以设置飞行时间
const position = Cesium.Cartesian3.fromDegrees(116.39, 39.91, 400);
  viewer.camera.flyTo({
      destination: position, // 设定相机的目的地
      orientation: { // 设定相机视口的方向
        // 控制视口方向的水平旋转,也就是沿着Y轴旋转,当数值为0时代表正北方向
        heading: Cesium.Math.toRadians(0),
        // pitch 控制视口的上下旋转,即沿X轴进行旋转,当数值为-90 ,表示俯视朝向地面
        pitch: Cesium.Math.toRadians(-90),
        // roll 控制视口的翻转角度,沿着Z轴进行旋转,数值为0,表示不翻转
        roll: 0
      },
      // 相机的飞行时间
      duration:5
    })

方法三:lookAt

锁定场景视角,可以将视图直接切换到位置,没有飞行的过程,并可以使用鼠标任意旋转视角方向,不会改变其位置

const center = Cesium.Cartesian3.fromDegrees(116.39, 39.91, 400);
// 水平旋转视口方向的角度
const heading = Cesium.Math.toRadians(50);
// 垂直旋转视口的角度
const pitch = Cesium.Math.toRadians(-90);
// 设置相机距离目标点的高度
const range = 2500
// 使用 lookAt方法
viewer.camera.lookAt(center, new Cesium.HeadingPitchRange(heading, pitch, range))

方法四: viewBoundingSphere

viewBoundingSphere 和 setView一样,没有飞行过渡效果,而是直接切换到指定的目的地,但是它可以给一个指定的目标点,让我们可以从多个角度更好的观测

const position = Cesium.Cartesian3.fromDegrees(116.39, 39.91, 400);
var orientation = Cesium.Transforms.headingPitchRollQuaternion(position, new Cesium.HeadingPitchRoll(-90, 0, 0))
var entity = viewer.entities.add({
  position: position,
  orientation: orientation,
  model: {
    uri: "../../libs/models/Cesium_Air.glb",
    // 设置模型缩放最大的比例
    minimumPixlSize: 128,
    maximumScale: 10000,
    show: true
  }
});
viewer.camera.viewBoundingSphere(new Cesium.BoundingSphere(position,20),new Cesium.HeadingPitchRange(0,0,0))

四、案例

1. 地月共存

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Load Moon in Cesium</title>
  <script src="https://cesium.com/downloads/cesiumjs/releases/1.76/Build/Cesium/Cesium.js"></script>
  <link href="https://cesium.com/downloads/cesiumjs/releases/1.76/Build/Cesium/Widgets/widgets.css" rel="stylesheet">
  <style>
    #cesiumContainer {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
    }

    html,
    body {
      width: 100%;
      height: 100%;
      margin: 0;
      padding: 0;
      overflow: hidden;
    }
  </style>
</head>

<body>
  <div id="cesiumContainer"></div>
  <script>
    Cesium.Ion.defaultAccessToken = '你申请的token'
    //创建一个基本的渲染器,包括一个世界高程提供商、一个视图容器和一个关闭地图图层选择器的选项。
    var viewer = new Cesium.Viewer('cesiumContainer');
    viewer._cesiumWidget._creditContainer.style.display = "none";//取消版权信息
    // 地球图层的显示
    viewer.scene.globe.enableLighting = true;
    // 创建月球的实体
    var moon = viewer.entities.add({
      name: 'Moon',
      // 使用Cesium.Cartesian3.fromDegrees方法将其位置设置为(0, 0),月球的高度为- 384400000,对应月球的平均距离。
      position: Cesium.Cartesian3.fromDegrees(0, 0, -38440000),
      ellipsoid: {
        radii: new Cesium.Cartesian3(1737100.0, 1737100.0, 1737100.0),
        material: new Cesium.ImageMaterialProperty({
          image: '../../libs/Cesium/Source/Assets/Textures/moonSmall.jpg'
        }),
        outline: false
      }
    });
    
  </script>
</body>

</html>
<!-- https://clpds.bao.ac.cn/gis3globleMarsMoon/tiles/getTiles/MoonTile/2000/jpg/0/0/0 -->

五、其他

在这里插入图片描述
6. 参考系:在 Cesium 中,除了北极和南极的两个点,其余默认朝向东的方向为默认参考系
7. x 轴:本初子午线和赤道的交点向欧洲的方向为x轴
8. y 轴:本初子午线和赤道的交点向亚洲的方向为y轴
9. z 轴:本初子午线和赤道的交点向北极的方向为z轴

http://cesium.xin/wordpress/archives/16.html

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

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

相关文章

【Leetcode60天带刷】day27回溯算法——39. 组合总和,40.组合总和II,131.分割回文串

​ 题目&#xff1a; 39. 组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一…

Redis 实战:逐步指南,让你轻松在 Linux 上安装与部署

目录 前言为什么会出现 Redis&#xff1f;磁盘、内存数据库缓存中间件 安装Redis5Redis6 使用总结 前言 Redis 中文网站&#xff1a;http://redis.cn/ Redis 是一个开源&#xff08;BSD 许可&#xff09;的&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库…

【编译、链接、装载十二】动态链接2

【编译、链接、装载十二】动态链接2 四、延迟绑定&#xff08;PLT&#xff09;五、动态链接相关结构1 “.interp”段2 “.dynamic”段3 .动态符号表——dynsym、动态符号字符串表——.dynstr4、动态链接重定位表 六、动态链接的步骤和实现1、动态链接器自举2、装载共享对象3、重…

2.10 高性能异步IO机制:io_uring

一、io_uring的引入 为了方便说明io_uring的作用&#xff0c;先举一个通俗点的例子 1、通过异步提高读写的效率 假设有一批数量很大的货&#xff0c;需要分批次运到厂里处理。这个时候就有两种方式&#xff1a; 1&#xff09;同步方式&#xff1a;运送一批到厂里&#xff0c…

TypeScript ~ TS 掌握编译文件配置项 ④

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

初识EasyX图形库

EasyX图形库 1. EasyX是什么&#xff1f;2. 入手EasyX3. EasyX函数介绍创建和关闭绘图窗口操作initgraphclosegraph 设置绘图背景setbkcolorcleardevice 画图形circlefillcirclerectanglefillrectangle 图形颜色及样式设置setfillcolorsetlinecolorsetbkcolorsetbkmodesetlines…

计算物理专题:有限差分法解决本征值问题

计算物理专题&#xff1a;有限差分法解决本征值问题 定态薛定谔方程差分形式 一维定态薛定谔方程 谐振子 解法代码 import numpy as np def householder(symmetric_matrix):M symmetric_matrixassert np.allclose(M,M.T),"matrix is not symmetric"N len(M)for …

chatgpt赋能python:用Python分析电影评分数据

用Python分析电影评分数据 Python是一种流行的数据分析和可视化工具&#xff0c;它可以让我们更深入地了解电影的评分数据。在本文中&#xff0c;我们将使用Python来分析一些电影评分数据&#xff0c;并试图找出一些有趣的模式和趋势。 数据来源 我们将使用公共数据集IMDb电…

第4章 网络层

1‌、下列关于路由算法描述错误的是&#xff08; &#xff09; A. 链路状态算法是一种全局路由算法&#xff0c;每个路由器需要维护全局状态信息B. OSPF 是一种域内路由协议&#xff0c;核心是基于 Dijkstra 最低费用路径算法C. RIP 是一种域内路由算法&#xff0c;核心是基…

采用SqlSugar的DBFirst相关功能创建数据库表对应的实体类

.NET Core官方教程中推荐使用的EF Core数据库ORM框架虽然能用&#xff0c;但是用起来并不是太方便&#xff08;或者是不习惯&#xff0c;之前用的最多的还是linq&#xff09;。之前下载的开源博客项目中使用的SqlSugar&#xff0c;后者是由果糖大数据科技团队维护和更新 &#…

基于WebAssembly构建Web端音视频通话引擎

Web技术在发展&#xff0c;音视频通话需求在演进&#xff0c;怎么去实现新的Web技术点在实际应用中的值&#xff0c;以及给我们带来更大的收益是需要我们去探索和实践的。LiveVideoStackCon 2022北京站邀请到田建华为我们从实践中来介绍WebAssembly、WebCodecs、WebTransport等…

【裸机开发】IRQ 中断服务函数(一) —— 汇编初始化

IRQ 和前面的Reset 函数不大一样&#xff0c;当一个IRQ中断产生时&#xff0c;我们也不知道这个IRQ中断来自哪个外设&#xff0c;因此&#xff0c;需要先获取到中断ID&#xff0c;随后才会跳转到真正的中断服务函数执行处理逻辑。 整个 IRQ 中断处理可以看做是包含了两个部分&…

MySQL 自增主键一定是连续的吗?

众所周知&#xff0c;自增主键可以让聚集索引尽量地保持递增顺序插入&#xff0c;避免了随机查询&#xff0c;从而提高了查询效率 但实际上&#xff0c;MySQL 的自增主键并不能保证一定是连续递增的。 下面举个例子来看下&#xff0c;如下所示创建一张表&#xff1a; 自增值保…

ORCA优化器浅析——GP数据库调用优化器流程

首先我们需要看CGPOptimizer类(src/include/gpopt/CGPOptimizer.h)为Greenplum数据库提供ORCA优化器export出来的函数的封装。Greenplum数据库主流程调用extern "C"中提供的函数&#xff0c;比如初始化ORCA优化器的函数InitGPOPT&#xff0c;优化查询树的函数GPOPTOp…

springboot+jsp农产品商城宣传网站设计与实现oo6e3

在该在线助农系统设计与实现中&#xff0c;idea能给用户提供更多的方便&#xff0c;其特点一是方便学习&#xff0c;方便快捷&#xff1b;二是有非常大的信息储存量&#xff0c;主要功能是用在对数据库中查询和编程。其功能有比较灵活的数据应用&#xff0c;只需利用小部分代码…

【Leetcode60天带刷】day30回溯算法——332.重新安排行程 , 51. N皇后 ,37. 解数独

​ 题目&#xff1a; 332. 重新安排行程 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08;肯尼迪国际机场&#xff09;出发的先生&#xff0c;…

【从零开始学习JAVA | 第十四篇】继承

目录 前言&#xff1a; 引入&#xff1a; 继承&#xff1a; 小拓展&#xff1a; 优点&#xff1a; 成员方法的继承问题&#xff1a; 总结&#xff1a; 前言&#xff1a; 继承是面向对象三大特性之一&#xff0c;它是在封装之后我们讲解的一个重要的性质&#xff0c;继承…

在github上创建个人主页的方法【2023更新版】

01-进入github的网站&#xff0c;链接 https://github.com/ &#xff0c;然后注册&#xff0c;登陆&#xff0c;注意登陆时设置的用户名(username)就是将来你个人主页的三级域名&#xff0c;所以这里一定要慎重填写username。如下图所示&#xff1a; 02-注册完成后进入个人主…

2024考研408-计算机组成原理第四章-指令系统

文章目录 前言一、指令系统现代计算机的结构1.1、指令格式1.1.1、指令的定义1.1.2、指令格式1.1.3、指令—按照地址码数量分类①零地址指令②一地址指令&#xff08;1个操作数、2个操作数情况&#xff09;③二地址指令④三地址指令⑤四地址指令 1.1.4、指令-按照指令长度分类1.…

【计算机组成原理】Yy-z02模型机的硬布线控制器设计

目录 一、Yy-z02模型机的系统结构 二、Yy-z02模型机的数据通路 三、Yy-z02模型机的指令执行 四、Yy-z02模型机的硬布线控制器 一、Yy-z02模型机的系统结构 指令系统的实现 <--- 构造它的硬件系统 硬件系统构造过程&#xff1a; 分析指令格式和各指令的功能确定部件连…