个人笔记|三维GIS开发-cesium坐标系统

三维GIS开发-vue+cesium坐标系统

  • 屏幕坐标系/平面直角坐标系

  • 笛卡尔空间直角坐标系/世界坐标

  • 地理坐标/弧度坐标


屏幕坐标系统/平面直角坐标系 - Cartesian2

常用来描述屏幕坐标系,比如鼠标在电脑屏幕上的点击位置,返回的就是Cartesian2.具体的是鼠标点击位置距离canvas左上角的像素值。屏幕左上角为原点(0, 0),水平方向为X轴,向右为正,垂直方向为Y轴,向下为正。

常用方法:

  • getPickRay(windowPosition, result) → Ray
    在世界坐标系中创建从相机位置到 windowPosition处的像素光线。

    Name Type Description
    windowPosition Cartesian2 像素的x和y坐标。
    result Ray (可选)将结果存储到的对象。

    返回Cartesian3射线的位置和方向。

  • pickPosition (windowPosition, result ) → [Cartesian3]

    返回从深度缓冲区和窗口位置重构的笛卡尔位置。

    Name Type Description
    windowPosition Cartesian2 窗口坐标以执行拾取
    result Cartesian3 (可选)恢复结果的对象。

    返回Cartesian3笛卡尔位置


笛卡尔空间直角坐标系/世界坐标 - Cartesian3

笛卡尔空间坐标的原点就是椭球的中心,我们在计算机上进行绘图时,不方便使用经纬度直接进行绘图,一般会将坐标系转换为笛卡尔坐标系,使用计算机图形学中的知识进行绘图。

new Cesium.Cartesian3(x, y, z)

返回3D笛卡尔点

类型是Number哦!
类型是Number哦!
类型是Number哦!


地理坐标/弧度坐标 - Cartographic

WGS84坐标系(World Geodetic System 1984)是为GPS全球定位系统使用而建立的坐标系统,坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.O定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系。我们平常手机上的指南针显示的经纬度就是这个坐标系下当前的坐标,经度范围[-180,180],纬度范围[-90,90]。

BUT!

BUUUUUT!!!

Cesium目前支持两种坐标系WGS84和WebMercator,但是没有实际的对象来描述WGS84坐标,都是以弧度的方式,即Cartographic类来运用的

new Cesium.Cartographic ( longitude , latitude , height )

由经度,纬度和高度定义的位置。

Name Type Description
longitude Number (可选)经度,以弧度为单位。
latitude Number (可选)纬度,以弧度为单位。
height Number (可选)椭球上方的高度,以米为单位。

单位是弧度哦!

单位是弧度哦!

单位是弧度哦!


坐标相互转换

只写一下自己用得多的

以后要是有用到新的再说

弧角转换

简记版本:弧度就是几分之,角度就是多少多少度,Math.xxx(x)里的x通常需要是弧度!!!

角转弧:Cesium.CesiumMath.toRadians(degrees)

弧转角:Cesium.CesiumMath.toDegrees(radians)

两C(Cartesian3, Cartographic)互换

Cartesian3→Cartographic

通常是对获取的坐标进行计算的时候用,比如同文件夹下的测距测面里,测距测面都是首先要把cartesian3形式的坐标转换成Cartographic形式拿到经纬高度,然后才好计算

Cesium.Cartographic.fromCartesian(position)

Cartographic→Cartesian3

通常是算好一个需要的点以后要添加实体的时候用,比如测距的时候添加线段中点

Cesium.Ellipsoid.WGS84.cartographicToCartesian(cartographicPosition)

世界坐标Cartesian3转角度WGS84地理坐标

思路:先从笛卡尔坐标转到弧度坐标,再从弧转角

/**
     * cartographic 转Degrees下地理坐标
     * @param point radius下的WGS84坐标
     * @return degrees下的WGS84坐标
     */
    cartesian3ToWGS84(point) {
      const cartographic = Cesium.Cartographic.fromCartesian(point);
      const lat = Cesium.Math.toDegrees(cartographic.latitude);
      const lng = Cesium.Math.toDegrees(cartographic.longitude);
      const alt = cartographic.height;
      return {
        longitude: lng,
        latitude: lat,
        height: alt,
      };
    }

你可能感兴趣的:(个人笔记|三维GIS开发-cesium坐标系统)