Cesium中的几种坐标及相互转换

1,105 阅读1分钟

最近准备做Cesium的测距功能,发现首先得了解下Cesium系统中的坐标类型及其相互转换;

Cesium 中有哪几种坐标?

  • Cartesian2:屏幕二维坐标,单位是px,通过ScreenSpaceEventHandler回调会取到的坐标都是Cartesian2;
  • Cartesian3: 世界三维坐标,单位是米,分别是x,y,z轴距离地心的距离,每个值都很大;Cesium一般采用Cartesian3坐标,因为计算机图形学更方便计算;
  • Geographic: 地理坐标,单位是经纬度,但是Cesium中所有经纬度需先转换为弧度再计算;
  • Cartographic: (经度,纬度,高程)单位弧度,弧度,米,高程是露出椭球体的高程;

坐标转换

  1. 经纬度转换为世界坐标
  • 直接转换
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对象的方法
  1. 经纬度转为弧度
Cartographic.fromCartesian
  1. 弧度和经纬度
  • 经纬度转弧度
Cesium.CesiumMath.toRadians(degrees)
  • 弧度转经纬度
Cesium.CesiumMath.toDegrees(radians) 
  1. 屏幕坐标和世界坐标相互转换
  • 屏幕转世界坐标:
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…