最近准备做Cesium的测距功能,发现首先得了解下Cesium系统中的坐标类型及其相互转换;
Cesium 中有哪几种坐标?
- Cartesian2:屏幕二维坐标,单位是px,通过ScreenSpaceEventHandler回调会取到的坐标都是Cartesian2;
- Cartesian3: 世界三维坐标,单位是米,分别是x,y,z轴距离地心的距离,每个值都很大;Cesium一般采用Cartesian3坐标,因为计算机图形学更方便计算;
- Geographic: 地理坐标,单位是经纬度,但是Cesium中所有经纬度需先转换为弧度再计算;
- Cartographic: (经度,纬度,高程)单位弧度,弧度,米,高程是露出椭球体的高程;
坐标转换
- 经纬度转换为世界坐标
- 直接转换
Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
- 先转为弧度,再转换
var ellipsoid=viewer.scene.globe.ellipsoid;
// 或者Cesium.Cartesian3.fromDegreesArray([-100, 40, -80, 30]),
var cartographic=Cesium.Cartographic.fromDegrees(lng,lat,alt);
var cartesian3=ellipsoid.cartographicToCartesian(cartographic);//借助了ellipsoid对象的方法
- 经纬度转为弧度
Cartographic.fromCartesian
- 弧度和经纬度
- 经纬度转弧度
Cesium.CesiumMath.toRadians(degrees)
- 弧度转经纬度
Cesium.CesiumMath.toDegrees(radians)
- 屏幕坐标和世界坐标相互转换
- 屏幕转世界坐标:
var pick1= new Cesium.Cartesian2(0,0);
var cartesian = viewer.scene.globe.pick(viewer.camera.getPickRay(pick1),viewer.scene);
- 世界坐标转屏幕坐标
//结果是Cartesian2对象,取出X,Y即为屏幕坐标。
Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, Cartesian3);
参考文献: www.cnblogs.com/aizai846/p/… www.jianshu.com/p/bae1cf5df…