1 , 屏幕坐标系(Cartesian2)
屏幕坐标是平面直角坐标系,是二维笛卡尔坐标系,cesium中使用Cartesian2来描述。
构造函数是 new Cesium.Cartesian2(x, y)。屏幕的左上角为原点(0, 0),水平方向为x轴,
向右为正,垂直方向为y轴,向下为负。
2 , 笛卡尔空间直角坐标系(Cartesian2)
以空间中的O点为原点,建立x轴,y轴,z轴的空间直角坐标系。笛卡尔空间直角坐标系的原点就是椭球的中心。
构造函数是 new Cesium.Cartesian3(x, y, z)
3 , WGS-84地理坐标
地球可以抽象成一个参考椭球体,椭球体上定义一系列的经线和纬线。椭球体表示空间位置采用经度,
纬度,和高来表示。坐标原点是地球质心。
经度(longitude):椭球体上某点的大地子午面与本初子午面间的两面角,向东为正,向西为负。
范围为[-180°,180°]
纬度(latitude):椭球面上某点的法线与赤道面的夹角。向北为正,向南为负。范围为[-90°,90°]
构造函数用 new Cesium.Cartographic(longitude, latitude, height)
4, Cesium坐标转换
1. 角度与弧度的转换
角度转弧度:var radians = Cesium.CesiumMath.toRadians(degrees)
弧度转角度:var radians = Cesium.CesiumMath.toDegrees(radians)
2. 经纬度转笛卡尔空间直角坐标
(1) 通过经纬度转换
var c3 = Cesium.Cartesian3.fromDegrees(lon, lat, height)
var c3 = Cesium.Cartesian3.fromDegreesArray(coordinates)
coordinates格式为不带高度的数组,例如[-115.0, 37.0, -107.0, 33.0]
var c3 = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates)
coordinates格式为带高度的数组,例如[-115.0, 37.0, 100, -107.0, 33.0, 200]
(2) 通过椭球体进行转换
var ellipsoid84 = Cesium.Ellipsoid.wgs84
var position = Cesium.Cartographic.fromDegrees(lon, lat, height)
var c3 = ellipsoid84.cartographicToCartesian(position)
var c3s = ellipsoid84.cartographicArrayToCartesianArray([pos1, pos2, pos3])
以上是通过角度的形式的经纬度进行转换,同理也可以使用弧度形式的经纬度,如
Cesium.Cartesian3.fromRadians
Cesium.Cartesian3.fromRadiansArray
Cesium.Cartesian3.fromRadiansArrayHeights
3. 笛卡尔空间直角坐标系转经纬度坐标
(1) 直接转换
var cartographic = Cesium.Cartographic.fromCartesian(cartesian3)
(2) 通过椭球体转换
var cartographic = Cesium.Ellipsoid.wgs84.cartesianToCartographic(cantesian3)
var cartographics =
Cesium.Ellipsoid.wgs84.cartesianArrayToCartographic([cantesian3, cantesian3, cantesian3])
4. 屏幕坐标和笛卡尔空间直角坐标的转换
(1) 屏幕坐标转场景笛卡尔空间直角坐标,场景坐标包含地形,倾斜摄影和其他三维模型坐标
var cartesian3 = viewer.scene.pickPosition(cartesian2)
(2) 屏幕坐标转地表笛卡尔空间直角坐标,包含地形,但是不包含倾斜摄影和其他三维模型坐标
var cartesian3 = viewer.scene.globe.pick(viewer.camera.getPickRay(cartesian2),viewer.scene)
(3) 屏幕坐标转椭球面笛卡尔空间坐标,不包含地球,倾斜摄影和其他三维模型坐标
var cartesian3 = viewer.scene.carmera.pickEllipsoid(cartesian2)
5. 笛卡尔空间直角坐标转屏幕坐标
var c2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(cartesian3)
6. 取两个点的中心坐标
const lineCenterPosition = Cesium.Cartesian3.lerp(c31, c32, 0.5, new Cesium.Cartesian3())