欢迎光临散文网 会员登陆 & 注册

Cesium局部坐标计算方法

2022-12-10 17:18 作者:地理信息技术杂谈  | 我要投稿

在cesium的开发中,有时会碰到局部的空间坐标计算,特别是在涉及到三维模型加载的场景中,例如,已知一个点的经纬度坐标,计算附近与它相距x、y、z距离的一个新坐标位置,同样需要换算成经纬度坐标,有时还需要考虑水平旋转和上下倾角。

cesium的Transforms里提供了根据当前点,建立一个局部坐标系的方法,通过矩阵进行坐标的转换,局部坐标系的建立方式:

//_ca_coord为Cartesian3坐标,可以通过Cesium.Cartesian3.fromDegrees,由经纬度坐标进行转换;//eastNorthUp代表东、北、上,对应x\y\z

const _localToWorld_Matrix =

Cesium.Transforms.eastNorthUpToFixedFrame(_ca_coord);

以上点作为局部坐标系的原点,距离它x、y、z的新坐标计算方式为:
//通过矩阵乘法进行实现,结果为Cartesian3坐标,同样可以转换为经纬度

const _new_ca =

Cesium.Matrix4.multiplyByPoint(_localToWorld_Matrix, Cesium.Cartesian3.fromElements(x, y, z), new Cesium.Cartesian3());

假如有偏北的旋转角,需要在转换矩阵上加上角度的转换:
//偏北方向是绕Z轴进行旋转,弧度值,其他旋转可以对应坐标轴

 let rotz = Cesium.Matrix3.fromRotationZ(rad);

 let rotationZ = Cesium.Matrix4.fromRotationTranslation(rotz);

            Cesium.Matrix4.multiply(_localToWorld_Matrix, rotationZ, _localToWorld_Matrix);

同样,用新的矩阵,按照前边的方式进行相乘,就能够得出新的坐标了。

Cesium局部坐标计算方法的评论 (共 条)

分享到微博请遵守国家法律