很多知识没办法完全按照类来,在一个应用功能的基础上,梳理Cesium的Api的类,不断学习更新
一、Cesium的视角坐标系统scene.camera
(一)坐标系统:
Cartesian3:三维笛卡尔(直角)坐标系,地心为原点的xyz,例x=****m,y=****m,z==****m
Cartographic:经纬度及wgs84的高程来定位,例
HeadingPitchRoll:在ENU(East-North-Up)坐标系中,相对坐标轴的(直接用来定位很少,一般用于camera相机位置设置,后面介绍)
Quaternion :(没懂)使用四维坐标描述的三维旋转。
每一种坐标系统,Cesium均给出了介绍,主要看参数及单位,如
new Cesium.Cartographic(longitude, latitude, height)
A position defined by longitude, latitude, and height.
Name | Type | Default | Description |
---|---|---|---|
longitude |
Number | 0.0 |
optional The longitude, in radians. |
latitude |
Number | 0.0 |
optional The latitude, in radians. |
height |
Number | 0.0 |
optional The height, in meters, above the ellipsoid. |
Cesium提供了各类坐标系统的转换,比如
(二)单位
Cesium.Math给出了各种坐标或者单位的转换,非常强大
#Math.ToRadians(度数) —>弧度
radians,弧度(真的是小学的内容),比如pa3.14,很多都是使用弧度单位,很少使用度数单位,所以一定要转换至弧度,比如heading、pitch、roll
#Math.ToDegrees(弧度)—>角度,比如弧度1,角度约57度
单位是非常重要的,否则数据是完全错误!!!!
(三)heading、pitch、roll
首先单位是弧度单位!所以如果设置什么90度,0度是无效的,必须Cesium.Math.toRadians(90)
网上介绍太花了,说的最直接的:
heading为0度对应的radians,即相机没有左右摆头
pitch为-90度对应的radians,即相机是正俯视s
roll一般为0,用的很少
有一种实用方法得到这三个值,将viewer‘手动调整到想要的位置,打开f12,输入viewer.camera.heading/pitch/roll就能得到此时的三值
(四)改变homeButton的初始位置实例
//设置想要的位置var homeCameraView={destination:new Cesium.Cartesian3.fromDegrees(111,29,1000000), orientation:{ heading:0, pitch:-1.5707963267948966, roll:0 }}; homeCameraView.duration = 10.0;//过程10秒,单位秒 homeCameraView.maximumHeight = 1000000;//飞行的最大高度,设置很高时就会先很高然后下降 homeCameraView.pitchAdjustHeight = 1000000;//如果飞的太高则自动纠正,保障地球在视角内 //api介绍Transform matrix representing the reference frame the camera will be in when the flight is completed. homeCameraView.endTransform = Cesium.Matrix4.IDENTITY; //改变homeButton的初始位置 viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) { e.cancel = true; viewer.scene.camera.flyTo(homeCameraView); });
原文地址:https://www.cnblogs.com/xiaoguniang0204/p/11742106.html