1.Cesium的笛卡爾三維坐標 new Cesium.Cartesian3(x,y,z)
2.經緯度坐標 new cesium.Cartographic(longitude,latitude,height)
經緯度除了特殊說明,一般都是弧度radians單位,也就是π。
弧度與角度的轉換方法:Cesium.Cartographic.toDegree();Cesium.Cartogrhpic.fromDegree(),同樣Cesium.Math.toDegree(radians)/toRadians(degree)
3.經緯度與cartesian3坐標之間
Cesium.Cartographic.fromCartesian(cartesian3,ellipsoid,resullt) 不同球體是不一樣的,這就是球體與投影
Cesium.Cartographic.fromDegrees(longitude,latitude,height,result) 這里是不需要球體的
Cesium.Cartographic.toCartesian(cartographic, ellipsoid, result)
4.矩陣
martix4,4*4的矩陣 矩陣轉換,將模型的X轉至真實空間的x
最常用的方法Cesium.Transfrom.eastNorthUpToFixedFrame() 以一個cartesian3點為中心,建成一個martix4矩陣,轉換。
其實質就是下面這個線性幾何公式

#Cesium.TranslationRotationScale(translation,rotation,scale)
three Parameters are:cartesian3,Quaternion,cartesian3
從字面上意思很明確:坐標轉換、旋轉、大小控制
#Cartesian3
Static members:
packedLength---將x,y,z放進array
UNIT_X/Y/Z---(1,0,0)/(0,1,0)/(0,0,1)
equals(right) → Boolean
Cesium中一些常用api
Cesium.Cartesian3.abs(cartesian, result) → Cartesian3
Cesium.Cartesian3.add(left, right, result) → Cartesian3
Cesium.Cartesian3.angleBetween(left, right) 返回兩個笛卡爾坐標之間的角度,left/right 均為一個cartesin3坐標,除非特殊說明單位都是弧度
Cesium.Cartesian3.cross(left, right, result) → Cartesian3 返回兩個向量的矢量積
Cesium.Cartesian3.distance(left, right) → Number 返回兩個坐標的距離
Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result) → Cartesian3
Cesium.Cartesian3.fromDegreesArray(coordinates, ellipsoid, result) → Array.<Cartesian3>
Cesium.Cartesian3.fromElements(x, y, z, result) → Cartesian3
Cesium.Cartesian3.multiplyByScalar(cartesian, scalar, result) → Cartesian3 乘以向量后的結果
Cesium.Cartesian3.negate(cartesian, result) → Cartesian3 方向取反
Cesium.Cartesian3.normalize(cartesian, result) —單位向量化
Cesium.Cartesian3.projectVector(a, b, result) → Cartesian3 投影
5.Cesium通過鼠標事件獲取坐標的方法
建立坐標獲取事件:var handler = new Cesium.ScreeSpaceEventHandler(canvas);
handler.serInputAction(function(movement){獲取事件},Cesium.screeSpaceEventType.左鍵點擊/鼠標移動等)
&獲取屏幕坐標 movement.position 屏幕坐標的原點是屏幕左上角,方向x向左正,y向下正
&世界坐標(個人理解為 理論坐標 )
viewer.scene.pickEllipsoid(movement.position,ellipsoind,result) 點擊時候,相機的視角線與橢球體相交處的cartesian3坐標;
注意球體默認為wgs84,一般應設置為當前球體viewer.scene.globe.ellipsoid
獲取的即為視線與理論球體表面相交處的坐標,也可以理解為高程為0,因為真實的地表一般都是高程大於0,所以也就是物體的深部
&場景坐標(帶地形等緩沖的坐標)
viewer.scene.pickPosition(movement.position) 返回從深度緩沖區和窗口位置重建的笛卡爾位置,所以這里是沒有球體參數的
&地表(地形)坐標
var ray = viewer.camera.getPickRay(movement.position) 獲取camera與點擊點之間的視線射線
var position = viewer.scene.golbe.pick(ray,viewer.scene.) 獲取視線ray與golbe相交處的坐標
注意:這里是globe,則代表了主體為為ellipsoid加載地形高程后的,這樣才能區別理論坐標,所獲取數據為考慮高程后的空間直角坐標系
備注:globe翻譯過來是地球的意思,而ellipsoid為橢球體,在計算純球體理論的時候用的是后者,當加載地形之類實際實物后用的是前者
//獲取空間坐標
positon為movement.position/endposition視鼠標事件
type:1為理論坐標 3為緩沖坐標 4為地表坐標 _getPosition(position,type) { let viewer = this.viewer; let scene = viewer.scene; let cartesian = null; switch (type) { case 1://第一種 獲取理論坐標 這種方式的高程全為0 let cartesian = viewer.camera.pickEllipsoid(position,viewer.scene.globe.ellipsoid); return cartesian; break; case 3: let cartesian = scene.pickPosition(position); return cartesian; break; case 4 : let ray = scene.camera.getPickRay(position); let cartesian = scene.globe.pick(ray,viewer.scene); return cartesian; break; default: break; }
6.cesium的三種拾取方式
Scene.pick: 返回窗口坐標對應的圖元的第一個對象。Scene.drillPick:返回窗口坐標對應的所有對象列表。Globe.pick: 返回一條射線和地形的相交位置點。
7.Matrix4 4x4矩陣
笛卡爾三維坐標 至 matrix4: Cesium.Transform.eastNorthUpToFixedFrame(cartesian3)
