Cesium局部坐標計算方法
在cesium的開發(fā)中,有時會碰到局部的空間坐標計算,特別是在涉及到三維模型加載的場景中,例如,已知一個點的經(jīng)緯度坐標,計算附近與它相距x、y、z距離的一個新坐標位置,同樣需要換算成經(jīng)緯度坐標,有時還需要考慮水平旋轉(zhuǎn)和上下傾角。
cesium的Transforms里提供了根據(jù)當前點,建立一個局部坐標系的方法,通過矩陣進行坐標的轉(zhuǎn)換,局部坐標系的建立方式:
//_ca_coord為Cartesian3坐標,可以通過Cesium.Cartesian3.fromDegrees,由經(jīng)緯度坐標進行轉(zhuǎn)換;//eastNorthUp代表東、北、上,對應x\y\z
const?_localToWorld_Matrix =
Cesium.Transforms.eastNorthUpToFixedFrame(_ca_coord);
以上點作為局部坐標系的原點,距離它x、y、z的新坐標計算方式為:
//通過矩陣乘法進行實現(xiàn),結(jié)果為Cartesian3坐標,同樣可以轉(zhuǎn)換為經(jīng)緯度
const?_new_ca =
Cesium.Matrix4.multiplyByPoint(_localToWorld_Matrix, Cesium.Cartesian3.fromElements(x, y,?z),?new?Cesium.Cartesian3());
假如有偏北的旋轉(zhuǎn)角,需要在轉(zhuǎn)換矩陣上加上角度的轉(zhuǎn)換:
//偏北方向是繞Z軸進行旋轉(zhuǎn),弧度值,其他旋轉(zhuǎn)可以對應坐標軸
?let?rotz = Cesium.Matrix3.fromRotationZ(rad);
?let?rotationZ = Cesium.Matrix4.fromRotationTranslation(rotz);
? ? ? ? ? ? Cesium.Matrix4.multiply(_localToWorld_Matrix, rotationZ, _localToWorld_Matrix);
同樣,用新的矩陣,按照前邊的方式進行相乘,就能夠得出新的坐標了。