坐标系详解

image

详情参考(码探长) https://www.cnblogs.com/aizai846/p/11846929.html

Cesium 中常用的坐标有两种 WGS84地理坐标系 和 笛卡尔空间坐标系,我们平时常用的以经纬度来指明一个地点就是用的WGS84坐标,笛卡尔空间坐标系常用来做一些空间位置变换如平移旋转缩放等等

一、WGS84地理坐标系

  • 简介
    • World Geodetic System 1984,是为GPS全球定位系统使用而建立的坐标系统,坐标原点为地球质心,其地心空间直角坐标系的Z轴指向BIH (国际时间服务机构)1984.O定义的协议地球极(CTP)方向,X轴指向BIH 1984.0的零子午面和CTP赤道的交点,Y轴与Z轴、X轴垂直构成右手坐标系。我们平常手机上的指南针显示的经纬度就是这个坐标系下当前的坐标,经度范围[-180,180],纬度范围[-90,90]。
    • Cesium目前支持两种坐标系WGS84和WebMercator,但是在Cesium中没有实际的对象来描述WGS84坐标,都是以弧度的方式来进行运用的也就是Cartographic类:

new Cesium.Cartographic(longitude, latitude, height),这里的参数也叫longitude、latitude,就是经度和纬度,计算方法:弧度= π/180×经纬度角度。

  • WGS84经纬度坐标系(没有实际的对象)
  • WGS84弧度坐标系(Cartographic)

二、笛卡尔空间坐标系

  • 直角坐标系cartesian3(x:number,y:number,z:number)(与cesium沟通唯一指定坐标)

    • 笛卡尔空间坐标的原点就是椭球的中心,我们在计算机上进行绘图时,不方便使用经纬度直接进行绘图,一般会将坐标系转换为笛卡尔坐标系,使用计算机图形学中的知识进行绘图。这里的Cartesian3,有点类似于三维系统中的Point3D对象,new Cesium.Cartesian3(x, y, z),里面三个分量x、y、z。
  • 平面坐标系cartesian2 (x: number, y: number)(屏幕坐标)

    • 平面坐标系也就是平面直角坐标系,是一个二维笛卡尔坐标系,与Cartesian3相比少了一个z的分量,new Cesium.Cartesian2(x, y)。Cartesian2经常用来描述屏幕坐标系,比如鼠标在电脑屏幕上的点击位置,返回的就是Cartesian2,返回了鼠标点击位置的xy像素点分量。

三、坐标转换

1、经纬度和弧度的转换
var radians=Cesium.Math.toRadians(degrees); // 经纬度转弧度
var degrees=Cesium.Math.toDegrees(radians); // 弧度转经纬度
2、WGS84经纬度坐标 和 WGS84弧度坐标系(Cartographic)的转换
// 方法一:
var longitude = Cesium.Math.toRadians(longitude1); // 其中 longitude1为角度

var latitude= Cesium.Math.toRadians(latitude1); // 其中 latitude1为角度

var cartographic = new Cesium.Cartographic(longitude, latitude, height);

// 方法二:
var cartographic= Cesium.Cartographic.fromDegrees(longitude, latitude, height); // 其中,longitude和latitude为角度

// 方法三:
var cartographic= Cesium.Cartographic.fromRadians(longitude, latitude, height); // 其中,longitude和latitude为弧度
3、WGS84坐标系 和 笛卡尔空间直角坐标系(Cartesian3)的转换
// 1、通过经纬度进行转换
var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);// 其中,高度默认值为0,可以不用填写;longitude和latitude为角度

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

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

// 注意:上述转换函数中最后均有一个默认参数ellipsoid(默认值为Ellipsoid.WGS84)。

// 同理,通过弧度转换,用法相同,具体有Cesium.Cartesian3.fromRadians,Cesium.Cartesian3.fromRadiansArray,Cesium.Cartesian3.fromRadiansArrayHeights等方法

// 2、通过弧度进行转换
var position = Cesium.Cartographic.fromDegrees(longitude, latitude, height);
var positions = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);
var positions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray([position1,position2,position3]);


// 3、笛卡尔空间直角坐标系 转换为 WGS84
// 直接转换
// a、先转换为弧度坐标
var cartographic= Cesium.Cartographic.fromCartesian(cartesian3);
// b、再使用经纬度和弧度的转换

// 间接转换
var cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);
var cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray([cartesian1,cartesian2,cartesian3]);

Pick----屏幕坐标

Cartesian----世界坐标(笛卡尔直角坐标)

cartographic-----地理坐标(弧度)

Point----经纬度坐标

新文件夹
JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。