Cesium中的坐标系及坐标转换

Cesium中有两种坐标系,WGS84地理坐标系和笛卡尔空间坐标系。

WGS84地理坐标系包括:WGS84经纬度坐标系(Cesium没有实际的对象表示)、 WGS84弧度坐标系(Cartographic);

笛卡尔空间坐标系包括:平面直角坐标系(Cartesian2)、笛卡尔空间直角坐标系(Cartesian3)、4D笛卡尔坐标系(Cartesian4)。

WGS84坐标系

 Cesium中没有描述WGS84经纬度坐标的对象,都是以弧度的方式来表示的也就是,Cartographic类:new Cesium.Cartographic(longitude, latitude, height),这里的参数也叫longitude、latitude,就是经度和纬度,以弧度为单位。

笛卡尔空间坐标系

平面直角坐标系(Cartesian2)

平面直角坐标系,是二维笛卡儿坐标系。构造函数是new Cesium.Cartesian2(x, y)。具体是位置距离canvas左上角的像素值。屏幕左上角为原点(0.0),屏幕水平方向为X轴,向右为正,垂直方向为Y轴,向下为正。Cesium中使用Cartesian2来描述屏幕坐标系

笛卡尔空间直角坐标系(Cartesian3)

笛卡尔空间坐标的原点就是椭球的中心,我们在计算机上进行绘图时,不方便使用经纬度直接进行绘图,比如做一些空间位置变换如平移旋转缩放等等,一般会将坐标系转换为笛卡尔坐标系。构造函数是new Cesium.Cartesian3(x,y,z),这里的Cartesian3里面的下x,y,z即为笛卡儿坐标系三个坐标轴方向上的分量。以空间中O点为原点,建立三条两两垂直的数轴;X轴(横坐标)、Y轴(纵坐标)、Z轴(竖坐标),建立了空间直角坐标系0—XYZ。

 坐标转换

经纬度和弧度转换
let radians=Cesium.Math.toRadians(degrees);//经纬度转弧度
let degrees=Cesium.Math.toDegrees(radians);//弧度转经纬度
经纬度坐标和弧度坐标的转换
//经纬度转弧度
//方法一:
let longitude = Cesium.Math.toRadians(longitude1); //其中 longitude1为角度
let latitude= Cesium.Math.toRadians(latitude1); //其中 latitude1为角度
let cartographic = new Cesium.Cartographic(longitude, latitude, height);//其中,longitude和latitude为弧度

//方法二:
let cartographic= Cesium.Cartographic.fromDegrees(longitude1, latitude1, height);//其中,longitude1和latitude1为角度

//方法三:
let cartographic= Cesium.Cartographic.fromRadians(longitude, latitude, height);//其中,longitude和latitude为弧度
弧度坐标和笛卡尔空间直角坐标转换
//弧度转笛卡尔
let position = Cesium.Cartesian3.fromRadians(longitude, latitude, height);//其中,高度默认值为0,可以不用填写;longitude和latitude为弧度

let positions = Cesium.Cartesian3.fromRadiansArray(coordinates);//其中,coordinates格式为不带高度的数组。

let positions = Cesium.Cartesian3.fromRadiansArrayHeights(coordinates);//coordinates格式为带有高度的数组。

//笛卡尔转弧度
let cartographic= Cesium.Cartographic.fromCartesian(cartesian3);
经纬度和笛卡尔空间直角坐标转换
//经纬度转笛卡尔
let position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);//其中,高度默认值为0,可以不用填写;longitude和latitude为角度

let positions = Cesium.Cartesian3.fromDegreesArray(coordinates);//其中,coordinates格式为不带高度的数组。例如:[-115.0, 37.0, -107.0, 33.0]

let positions = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);//coordinates格式为带有高度的数组。例如:[-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]

//笛卡尔转经纬度,先转弧度坐标,再转经纬
let cartographic= Cesium.Cartographic.fromCartesian(cartesian3);
let longitude = Cesium.Math.toRadians(cartographic.longitude);
let latitude= Cesium.Math.toRadians(cartographic.latitude); 
平面坐标和笛卡尔空间直角坐标转换
//平面坐标转笛卡尔空间直角坐标
let handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (e) {
//方法一:
//e.position为屏幕坐标,pickEllipsoid返回笛卡尔坐标
 let position=
 viewer.scene.camera.pickEllipsoid(e.position,viewer.scene.globe.ellipsoid);//第二个参数不写默认为Ellipsoid.WGS84

//方法二:
 let ray = viewer.camera.getPickRay(e.position);//getPickRay返回Ray射线
 let position = viewer.scene.globe.pick(ray, viewer.scene);//查找射线与地球表面之间的交点
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);

//笛卡尔空间直角坐标转平面坐标
let windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值