Cesium局部坐标计算方法

在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);

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值