首先要了解Cesium是什么。
以下是一些中文版学习Cesium的网站:
Cesium 主要功能介绍
<!--
* @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>
Viewer:主要窗口
const viewer = new Cesium.Viewer('div的ID',{ options可选参数 },包括图层)
Scene:场景类
viewer.scene.globe.show = false
,隐藏地球图层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>
DataSourceCollection:数据源集合类
是 Cesium 中加载矢量数据的主要方式之一,最大的特点是支持加载矢量数据集和外部文件的调用,主要有三种调用方式:分别为 CzmlDataSource,kmlDataSource,GeoJsonDataSource,分别代表加载Czml格式、kml格式和GeoJson格式数据,在 GIS 开发中加载矢量数据是必不可少的功能
viewer.GeoJsonDataSource.load("../../libs/sampleData/ne_10m_us_states.topojson")
主要是将三维模型绘制在三维坐标上,Cesium 一共有以下五种坐标系
WGS84经纬度坐标系(没有实际的对象)
WGS84弧度坐标系(Cartographic)
构造 Cartographic 对象:new cesium.Cartographic(longitude,latitude,height)
,参数分别为经度、维度、高度
角度和弧度的换算:弧度 = Π/180 x 经纬度角度
经纬度角度 = 180/Π x 弧度
笛卡尔空间直角坐标系(Cartesian3)
以空间中O点为原点,建立三条两两垂直的数轴。笛卡尔空间直角坐标系的原点就是椭球的中心
构造 Cartesian3 对象:new Cesium.Cartesian3(x,y,z)
,分别代表X,Y,Z,三根数轴上的值
屏幕坐标系(Cartesian2)
也叫平面坐标系,是一个二维的笛卡尔坐标系,屏幕左上角为原点,屏幕水平方向为X轴,垂直方向为Y轴,向下为正。
构造 Cartesian2 对象:new Cesium.Cartesian3(x,y,)
,分别代表X,Y,两根数轴上的值
4D笛卡尔坐标系(Cartesian4)
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 具有空中飞行逐步切换视域的效果,还可以设置飞行时间
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
})
锁定场景视角,可以将视图直接切换到位置,没有飞行的过程,并可以使用鼠标任意旋转视角方向,不会改变其位置
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 和 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))
DOCTYPE html>
<html lang="en">
<head>
<title>Load Moon in Cesiumtitle>
<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>
6. 参考系:在 Cesium 中,除了北极和南极的两个点,其余默认朝向东的方向为默认参考系
7. x 轴:本初子午线和赤道的交点向欧洲的方向为x轴
8. y 轴:本初子午线和赤道的交点向亚洲的方向为y轴
9. z 轴:本初子午线和赤道的交点向北极的方向为z轴
http://cesium.xin/wordpress/archives/16.html