Cesium 坐标系之间的相互关系
1.WGS84经纬度坐标系(地理坐标系,在Cesium中没有实体对象对应,通常使用经纬度弧度表示位置信息)
wgs坐标系是国际上通用的坐标系,也称地球坐标系,gps和北斗系统都使用的是wgs坐标系。谷歌地图使用的是wgs坐标系(中国部分除外),openstreetmap使用的也是这种坐标系为球面坐标。 参考平面地是椭球面,坐标单位:经纬度;
longitude : 114.59 [-180,180]
latitude : 30.56 [-90,90]
2. WGS84弧度坐标系(Cartographic)
构造函数
new Cesium.Cartographic(longitude对应弧度, latitude对应弧度, height米);
弧度与角度转换公式
var 弧度 = π / 180 * 经纬度
Cesium中弧度与角度转换函数
var degrees = Cesium.Math.toDegrees(radians);
var radians = Cesium.Math.toRadians(degrees);
静态函数
Cesium.Cartographic.fromDegrees(longitude, latitude, height米);
Cesium.Cartographic.fromRadians(longitude对应弧度, latitude对应弧度, height米);
3. 笛卡尔空间直角坐标系(Cartesian3)
坐标原点是地球椭球体的球心
构造函数
new Cesium.Cartesian3(x,y,z);
4. 平面直角坐标系(Cartesian2)
也叫屏幕坐标系,
构造函数
new Cesium.Cartesian2(x,y);
相互转换
1、WGS84经纬度(弧度)坐标转换笛卡尔坐标
方法一:
var cartesian3 = Cesium.Cartesian3.fromDegrees(longitude, latitude, height米);
var cartesian3 = Cesium.Cartesian3.fromDegreesArray(coordinates);
var cartesian3 = Cesium.Cartesian3.fromDegreesArrayHeights(longitude, latitude, height米);
方法二(间接法):
var wgs84 = Cesium.Cartographic.fromDegrees(longitude, latitude, height米);
或
var wgs84 = Cesium.Cartesian3.fromRadians(longitude对应弧度, latitude对应弧度, height米);
var cartesian3 = Cesium.Ellipsoid.WGS84.cartographicToCartesian(wgs84);
或
var cartesian3Array = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray([wgs84,wgs84_1,wgs84_2]);
2、笛卡尔坐标转换WGS84经纬度(弧度)坐标
var cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
或
var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);
或
var cartographic = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray([cartesian3,cartesian3_1,cartesian3_2]);
3、屏幕坐标转换场景WGS84经纬度坐标
// 包含地形、倾斜摄影场景、模型等坐标的转换
var cartesian3 = viewer.scene.pickPosition(cartesian2);
// 只包含地形,不包含倾斜摄影场景、模型等坐标的转换(地面坐标拾取,如下图)
let ray = viewer.camera.getPickRay(cartesian2);
let cartesian = viewer.scene.globe.pick(ray, viewer.scene);
// 屏幕坐标转椭球面坐标,参考椭球体的WGS84坐标,不包括地形、模型、倾斜摄影表面坐标
var cartesian3 = viewer.scene.camera.pickEllipsoid(cartesian2);
4、笛卡尔坐标转换屏幕坐标
var cartesian2 =
Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3)