乐趣区

关于cesium:Cesium中的坐标类型及转换

06-Cesium 中的坐标类型及转换

1、屏幕坐标

屏幕坐标是立体直角坐标系,是二维笛卡尔坐标系。Cesium 中应用 Cartesian2 来形容屏幕坐标系构造函数是new Cesium.Cartesian2(x, y)。具体是鼠标点击地位间隔 canvas 左上角的像素值。屏幕左上角为原点(0.0),屏幕程度方向为 X 轴,向右为正,垂直方向为 Y 轴,向下为正。

        let handlerPoint = new Cesium.ScreenSpaceEventHandler(window.viewer.scene.canvas);
        handlerPoint.setInputAction(function(event) {console.log(event)  // 打印出的就是屏幕坐标
        }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

2、笛卡尔空间直角坐标

以空间中 O 点为原点,建设三条两两垂直的数轴;X 轴(横坐标)、Y 轴(纵坐标)、Z 轴(竖坐标),建设了空间直角坐标系 0—XYZ。笛卡儿空间直角坐标的原点就是椭球的核心。构造函数是new Cesium.Cartesian3(x,y,z),这里的 Cartesian3 外面的下 x,y,z 即为笛卡儿坐标系三个坐标轴方向上的重量。

3、地理坐标

首先将地球形象成一个规定的迫近原始天然地球表面的椭球体,称为参考椭 球体,而后在参考椭球体上定义系列的经线 和纬线形成经纬网。须要阐明的是经纬天文坐标系不是立体坐标系,因为度不是规范的长度单位, 不可用其间接量测长度和面积。基于椭球体示意空间点的地位采纳三个参数: 大地经度、大地纬度、大地高。

大地经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。向东为正,向西为负。

大地纬度:参考椭球面上某点的法线与赤道立体的夹角。向北为正,向南为负。

大地高:指某点沿法线方向到参考椭球面的间隔。

不同的椭球体大小、定位与定向决定了不同的坐标零碎。

以 WGS-84 为例,WGS-84 是为美国全球定位系统 (GPS) 的应用而建设的坐标零碎,坐标原点为地球质心,其地心空间直角坐标系的 Z 轴指向 BIH 1984.0 定义的协定地球极 (CTP) 方向。X 轴指向 BIH1984.0 定义的零子午面和 CTP 赤道的交点。Y 轴与 Z 轴、X 轴垂直形成右手坐标系。经度范畴为 [-180°,180°], 纬度范畴为[- 90°,90°]。WGS-84 是目前利用范畴最为宽泛的天文坐标系,通常国外通感影像均采纳 WGS-84。Cesium 中定义 Cartographic,用new Cesium.Cartographic(longitude,latitude,height) 来形容地理坐标,这里 longitude、latitude 都是弧度坐标值

4、经纬度坐标

经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。东正西负。
纬度:参考椭球面上某点的法线与赤道立体的夹角。北正南负。

Cesium 中的坐标转换

1、经纬度(Degrees)与笛卡尔空间坐标(Cartesian3)互相转换

  • 经纬度转换为笛卡尔空间坐标
let point= Cesium.Cartesian3.fromDegrees(longitude,latitude,height) //height 能够不传
  • 笛卡尔空间坐标转换为经纬度
let cartorgraphic = Cesium.Cartographic.fromCartesian(cartesian3);

2、经纬度(Cartographic)和地理坐标(Degrees)互相转换

  • 经纬度转地理坐标
let point =Cesium.Math.toRadians(degrees)
  • 地理坐标转经纬度
let point =Cesium.Math.toDegrees(radians)

3、屏幕坐标(Cartesian2)和笛卡尔空间直角坐标(Cartesian3)互相转换

  • 屏幕坐标转笛卡尔空间直角坐标

(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.camera.pickEllipsoid(cartesian2);
  • 笛卡尔空间直角坐标转屏幕坐标
let c2=Cesium.SceneTransfroms.wgs84ToWindowCoordinates(cartesian3);
退出移动版