Cesium的类-Camera

时间:2019-10-26
本文章向大家介绍Cesium的类-Camera,主要包括Cesium的类-Camera使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

很多知识没办法完全按照类来,在一个应用功能的基础上,梳理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.
NameTypeDefaultDescription
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