Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品。它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以及多平台,易用性上都有高质量的保证。
//加载谷歌中国卫星影像,谷歌地球商业版,需要,报跨域资源请求错误
var url = "http://mt1.google.cn/vt/lyrs=s&hl=zh-CN&x={x}&y={y}&z={z}&s=Gali";
var Google = new Cesium.UrlTemplateImageryProvider({url:url})
//Viewer第一个参数容器就是需要上面的div容器承载
var viewer = new Cesium.Viewer('cesiumContainer',{
// 将图层选择的控件关掉,才能添加其他影像数据
baseLayerPicker:false,
imageryProvider:Google,
});
设置后可以看到山峰轮廓
var viewer = new Cesium.Viewer('cesiumContainer',{
terrainProvider:Cesium.createWorldTerrain()//显示地形
});
options为object类型:{}
object有以下属性:
属性 | 类型 | 说明 |
---|---|---|
destination | Cartesian3 |
Rectangle |
orientation | Object | 包含了方位(direction)、上方向(up)以及方位角(heading)、俯仰角(pitch)、滚动角(roll)属性的对象。 默认情况下,3D中方位(direction)指向框架中心,在Columbus视图中指向负z方向。 在3D中上方向(up)指向本地北方向,而在Columbus视图中指向正y方向。在无限滚动模式下,二维视图不使用方向(orientation)。 |
endTransform | Matrix4 |
包含了方位(direction)、上方向(up)以及方位角(heading)、俯仰角(pitch)、滚动角(roll)属性的对象。 默认情况下,3D中方位(direction)指向框架中心,在Columbus视图中指向负z方向。 在3D中上方向(up)指向本地北方向,而在Columbus视图中指向正y方向。在无限滚动模式下,二维视图不使用方向(orientation)。 |
设置相机位置、方向和变换(加载时直接显示设置的位置)。
// 1. 通过top-down视图设置位置。
viewer.camera.setView({
destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)
});
// 2 通过方位角、俯仰角、滚动角设置视图。
viewer.camera.setView({
destination : cartesianPosition,
//roll 是围绕 X 轴旋转;
//pitch 是围绕 Y 轴旋转;
//heading 是围绕 Z 轴旋转
orientation: {
heading : Cesium.Math.toRadians(0.0),
pitch : Cesium.Math.toRadians(-90),
roll : 0.0
}
});
// 3. 相机空间位置不变,改变方位角、俯仰角和滚动角。.
viewer.camera.setView({
orientation: {
heading : Cesium.Math.toRadians(90.0), // east, default value is 0.0 (north)
pitch : Cesium.Math.toRadians(-90), // default value (looking down)
roll : 0.0 // default value
}
});
// 4. 通过自顶向下视图查看矩形。
viewer.camera.setView({
destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});
// 5. 通过使用单位向量的方向(orientation)设置相机位置。.
viewer.camera.setView({
destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),
orientation : {
direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),
up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)
}
});
相机从当前位置飞行到新的空间位置(显示设置的位置时会有个过度)。
// 1. 飞向通过top-down视图表示的位置
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-117.16, 32.71, 15000.0)
});
// 2. 飞向通过top-down视图表示的矩形
viewer.camera.flyTo({
destination : Cesium.Rectangle.fromDegrees(west, south, east, north)
});
// 3. 飞向利用单位向量表示方向(orientatin)的位置
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),
orientation : {
direction : new Cesium.Cartesian3(-0.04231243104240401, -0.20123236049443421, -0.97862924300734),
up : new Cesium.Cartesian3(-0.47934589305293746, -0.8553216253114552, 0.1966022179118339)
}
});
// 4. 飞向利用方位角(heading)、俯仰角(pitch)、滚动角(roll)表示方向(orientatin)的位置
viewer.camera.flyTo({
destination : Cesium.Cartesian3.fromDegrees(-122.19, 46.25, 5000.0),
orientation : {
heading : Cesium.Math.toRadians(175.0),
pitch : Cesium.Math.toRadians(-35.0),
roll : 0.0
}
});
roll
是围绕 X 轴旋转;
pitch
是围绕 Y 轴旋转;
heading
是围绕 Z 轴旋转
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ytZfFEdO-1627047403797)(695334-20190326182805986-694175803.png)]
给建筑加载立体图形
// 坐标设置在纽约,这样会有默认的3dTiles数据
var initialPosition = Cesium.Cartesian3.fromDegrees(-74.01881302800248, 40.69114333714821, 753);
var initialOrientation = new Cesium.HeadingPitchRoll.fromDegrees(21.27879878293835, -21.34390550872461, 0.0716951918898415);
viewer.scene.camera.setView({
destination: initialPosition,
orientation: initialOrientation,
endTransform: Cesium.Matrix4.IDENTITY
});
// 加载3DTiles数据,纽约进行封装了
var city = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url:Cesium.IonResource.fromAssetId(5741)}))
//设置3DTiles样式
//方法一
// var transparentStyle = new Cesium.Cesium3DTileStyle({
// color:"color('white',0.3)",
// show: true
// })
//方法二(根据楼的高度设置不同颜色)
var heightStyle = new Cesium.Cesium3DTileStyle({
color:{
conditions:[
["${height} >= 300","rgba(45,0,75,0.5)"],
["${height} >= 200","rgb(102,71,151)"],
["${height} >= 100","rgb(170,162,204)"],
["${height} >= 50","rgb(224,226,238)"],
["${height} >= 25","rgb(252,230,200)"],
["${height} >= 10","rgb(248,176,87)"],
["${height} >= 5","rgb(198,106,11)"],
["true","rgb(102,71,151)"]
]
}
});
city.style = heightStyle
czml
是官方自定义的文件格式
//加载czml文件
var dronePromise = Cesium.CzmlDataSource.load('SampleData/sampleFlight.czml')
//创建一个无人机对象
var drone;
dronePromise.then(function(dataSource){
viewer.dataSources.add(dataSource)
//根据id获取czml中的数据
drone = dataSource.entities.getById('Aircraft/Aircraft1');
drone.model = {
// 模型路径
uri : 'SampleData/Models/pla/客机模型.gltf',
// uri : 'SampleData/Models/CesiumDrone.gltf',
minimumPixelSize: 80,
maximumScale: 500,
silhouetteColor: Cesium.Color.WHITE,
silhouetteSize:2
}
//基于采样位置的加法计算定向
drone.orientation = new Cesium.VelocityOrientationProperty(drone.position)
//平滑路径插值
drone.position.setInterpolationOptions({
interpolationAlgorithm:Cesium.HermitePolynomialApproximation,
interpolationDegree:2
})
drone.viewFrom = new Cesium.Cartesian3(0,-30,30);
})
官方文档中有一个
entity
的实体类对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ccKngGYQ-1627047403801)(image-20210705174552710.png)]
可以通过设置一个
Entity
类(可以是一个模型、多边形、圆球等),然后通过
viewer.entities.add()
添加到页面当中
//添加一个实体
var entity = viewer.entities.add({
name: ‘无人机’,
//实体显示位置
position: Cesium.Cartesian3.fromDegrees(
-123.0744619,//经度
44.0503706,//维度
1500,//高度
),
//表示这个实体代表的是一个实体
model: {
uri: 'SampleData/Models/CesiumDrone.gltf',
minimumPixelSize: 128,
maximumScale: 100,
silhouetteSize:2
},
//在实体位置显示一个点
point : new Cesium.PointGraphics({
pixelSize : 10,
color : Cesium.Color.YELLOW
})
})
//获取或设置当前由相机跟踪的实体实例。
viewer.trackedEntity = entity;
根据设置的
一组经纬度
在地图上画出一条线
var dashedLine = viewer.entities.add({
name: "航线",
//线段
polyline: {
positions: Cesium.Cartesian3.fromDegreesArrayHeights([
-86.0,//经度
40.0,//维度
3300000,//高度
-4.866987,
31.979569,
3300000,
0.431435,
69.439938,
3300000,
-86.256628,
60.56546,
3300000,
]),
width: 4,
material: new Cesium.PolylineDashMaterialProperty({
color: Cesium.Color.CYAN,
}),
},
});