Cesium中的坐标系统简单说明(2026-06-08)


一、坐标系统

cesium中坐标系统分为地理坐标、世界坐标(X,Y,Z)、屏幕坐标三种。

通常使用地理坐标来进行位置表达,笛卡尔空间坐标系常用来做一些空间位置变换如平移旋转缩放,屏幕坐标常用来做用户交互等,三者之间相互转换。

(1)默认使用WGS84作为空间参考,地理坐标又分为两种经纬度和弧度两种表达方式

(2)采用右手系的笛卡尔空间直角坐标系,也叫世界坐标、原点就是椭球的中心。这里的Cartesian3,有点类似于三维系统中的Point3D对象,new Cesium.Cartesian3(x, y, z)

(3)屏幕坐标即屏幕显示的二维坐标,左上角为坐标原点,鼠标点击即可获取,new Cesium.Cartesian2(x, y)


二、坐标转换

1.角度和弧度互转

var radians=Cesium.Math.toRadians(degrees);//经纬度转弧度
var degrees=Cesium.Math.toDegrees(radians);//弧度转经纬度

2.地理经纬度转地理弧度

//方法一:
var longitude = Cesium.Math.toRadians(lng); //其中 lng为经度
var latitude= Cesium.Math.toRadians(lat); //其中 lat为纬度
var cartographic = new Cesium.Cartographic(longitude, latitude, height);

//方法二:
var cartographic= Cesium.Cartographic.fromDegrees(lng, lat, height);//其中,lng和lat为经纬度

//方法三:
var cartographic= Cesium.Cartographic.fromRadians(longitude, latitude, height);//其中,longitude和latitude为弧度

3.经纬度转世界坐标

lnglatToCartesian(lng,lat,height){
     //直接转换
    var cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height); 
    //先转弧度后转笛卡尔
    //var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, height); //单位:度,度,米 
    //var ellipsoid=viewer.scene.globe.ellipsoid;
    //var cartesian3 = ellipsoid.cartographicToCartesian(cartographic); 
    return cartesian3    
}

4.世界坐标转经纬度

Cesium不支持笛卡尔坐标直接转经纬度,需要先转换为弧度,再由弧度转化为经纬度

cart3Tolnglat(cartesian3){
   var ellipsoid=this._viewer.scene.globe.ellipsoid;
   const cartograhphic=ellipsoid.cartesianToCartographic(cartesian3);
    var lat=Cesium.Math.toDegrees(cartograhphic.latitude);
   var lng=Cesium.Math.toDegrees(cartograhphic.longitude);
    var height=cartographic.height
   return [lng,lat,height]; 
},

5.世界坐标转屏幕坐标

var cartesian2= Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3)

6.屏幕坐标转世界坐标

坐标获取

var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (event) {
  //event.position为屏幕坐标 
  console.log(event.position);
  //获取包含了地形、倾斜摄影表面、模型的世界坐标
  //解决在没有3dTile模型下的笛卡尔坐标不准问题,viewer.scene.globe.depthTestAgainstTerrain = true; //默认为false
  var pickedPosition = viewer.scene.pickPosition(event.position);
  if (Cesium.defined(pickedPosition)) {
    console.log('1',pickedPosition);
  }
  //获取地球表面的世界坐标,包含地形,不包含其他模型
  //Create a ray from the camera position through the pixel at windowPosition in world coordinates.
  var ray = viewer.camera.getPickRay(event.position);
  //Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.
  var position2 = viewer.scene.globe.pick(ray, viewer.scene);
  console.log('2',position2);
  //获取参考椭球的世界坐标
  var position3 = viewer.scene.camera.pickEllipsoid(event.position, viewer.scene.globe.ellipsoid);
  console.log('3',position3);
                                         
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值