针对作坐标系这边参考网上以及自己的一些理解大家可以参考学习一下。
文章目录
- **一、GIS 坐标系**
- **二、经纬度坐标(球面坐标)**
- **三、地理坐标(弧度)**
- **四、屏幕坐标系**
- **五、空间直角坐标系**
- **六、Cesium 中的坐标系**
- **七、坐标系转换**
一、GIS 坐标系
要想在 Cesium 开发中得心应手,就得熟悉 Cesium 中常用的坐标类型,以及它们之间是如何进行转换的。等真正要用的时候,还可以再回来仔细研究,加深理解。
二、经纬度坐标(球面坐标)
经纬度坐标通常被叫做地理坐标或者地球坐标哦。它是一种基于地球表面的坐标系统,专门用来确定地球上任何一个点的位置呢。这个坐标系统主要用两个数值来表示位置,那就是经度和纬度。
- 经度(Longitude):它表示的是从本初子午线(一般是通过英国伦敦的格林尼治天文台那条线)向东或者向西的角度距离。经度的范围是从 -180° 到 +180°,其中 0° 就代表本初子午线。
- 纬度(Latitude):表示从赤道向北或者向南的角度距离。纬度的范围是从 -90°(南极点)到 +90°(北极点),而 0° 呢,就表示赤道。
经纬度坐标也常常被称作:
- 球面坐标(Spherical Coordinates):因为地球近似是一个球体嘛,所以经纬度坐标就可以看作是在球面上确定点的位置。
- 大地坐标(Geodetic Coordinates):在大地测量学当中,这种坐标系统是用来描述地球表面上的点的。
- WGS84 坐标:WGS84(World Geodetic System 1984)是一种被广泛使用的全球地理坐标系统哦。它提供了一个标准化的参考框架,专门用于地理定位呢。
经纬度坐标的应用可广泛啦,在地图制作、导航、地理信息系统(GIS)、航空和海洋导航等领域都能看到它的身影。在数字地图服务和应用程序当中,经纬度坐标更是最常见的位置表示方式之一呢。
三、地理坐标(弧度)
在地理信息系统(GIS)里呀,地理坐标通常指的是地球上某个点的位置,用经纬度来表示。不过呢,因为地球是一个近似的椭球体,要是用弧度而不是角度来表示经纬度坐标的话,就可以避免在计算当中引入一些复杂的情况,特别是在进行距离和面积的测量的时候。
弧度是一种角度的度量单位哦,它是基于圆的周长和半径之间的关系来定义的。一个完整的圆周被定义为 2π 弧度。弧度和角度的转换关系是这样的:比如角度转弧度,就是用角度值乘以 π/180;弧度转角度呢,就是用弧度值乘以 180/π。
在 GIS 中,使用弧度的地理坐标可以简化一些数学运算哦,尤其是涉及到三角函数和地球曲率的计算。比如说,在计算两点之间的大圆距离(也就是地球表面的最短路径)的时候,用弧度就可以更直接地应用球面三角学公式呢。
地理坐标(弧度)的应用:
- 距离计算:使用球面三角学公式,可以更准确地算出两点之间的距离哦。
- 方向计算:要确定从一个点到另一个点的方向,用弧度可以简化计算过程呢。
- 地图投影:在某些地图投影中,使用弧度可以更自然地处理地球表面的曲率问题。
四、屏幕坐标系
屏幕坐标系是一种二维坐标系统,专门用来描述屏幕上的点或者区域的位置。在屏幕坐标系当中,通常是以屏幕的左上角为原点,水平向右是 x 轴正方向,垂直向下是 y 轴正方向。在 Cesium 中,屏幕坐标系也被叫做二维笛卡尔平面坐标哦。
可以这样来创建屏幕坐标系中的一个点:new Cesium.Cartesian2(x, y)
。
屏幕坐标系有这些特点呢:
- 原点位置:屏幕坐标系的原点(0,0)就在屏幕的左上角。
- 正方向:x 轴正方向是向右的,y 轴正方向是向下的。
- 单位:通常使用像素(px)作为单位。
- 范围:坐标值的范围取决于屏幕或者窗口的大小。
五、空间直角坐标系
在地理信息系统(GIS)中,空间直角坐标系是一种三维坐标系统哦,它可以在三维空间中非常精确地表示点、线、面的位置。这种坐标系一般是由三个正交的坐标轴组成,也就是 X、Y 和 Z 轴。
空间直角坐标系有这些特点:
- 正交性:X、Y 和 Z 轴是相互垂直的,形成了一个直角坐标系。
- 三维性:可以表示三维空间中的任何位置呢,包括高度或者深度信息。
- 标准化:通常是以地球的质心或者某个参考点为原点,建立起一个标准化的坐标系统。
- 应用广泛:在地理测量、城市规划、建筑设计、3D 建模等领域都有广泛的应用。
六、Cesium 中的坐标系
Cesium 中支持两种坐标系呢,分别是 3D 笛卡尔坐标系和经纬度坐标系。
- 3D 笛卡尔坐标系
- 先来了解一下笛卡尔空间直角坐标系哈。它的 X、Y、Z 三个轴的正方向如下图所示。坐标系的原点是在地球的中心哦。所以呀,这些坐标通常是负的。单位一般是米。可以这样来创建一个 3D 笛卡尔坐标系中的点:
Cesium.Cartesian3(x, y, z)
。
- 先来了解一下笛卡尔空间直角坐标系哈。它的 X、Y、Z 三个轴的正方向如下图所示。坐标系的原点是在地球的中心哦。所以呀,这些坐标通常是负的。单位一般是米。可以这样来创建一个 3D 笛卡尔坐标系中的点:
- 地理坐标系
- 这是一种基于经度和纬度的坐标系,用度数来表示位置。在 Cesium 中,可以通过将经度、纬度和高度值传递给 Cartographic 对象来表示地理坐标哦。其中经度和纬度是以度数表示的,高度值可以是以米或其他单位表示的。Cesium 会把地理坐标转换为笛卡尔坐标,这样就能在地球表面上进行可视化啦。
七、坐标系转换
Cesium 提供了很多可以进行坐标系互相转换的大类呢。
- 经纬度转空间直角:
const cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height);
这段代码的意思就是,把经度(lng)、纬度(lat)和高度(height)表示的经纬度坐标转换为空间直角坐标系中的一个点。
- 经纬度转地理坐标(弧度):
const radians = Cesium.Math.toRadians(degrees);
这里呢,是把用角度表示的度数(degrees)转换为弧度(radians),也就是把经纬度从角度表示转换为弧度表示。
- 地理坐标(弧度)转经纬度:
const degrees = Cesium.Math.toDegrees(radians);
和上面相反,把弧度(radians)表示的地理坐标转换为用角度表示的经纬度度数(degrees)。
- 空间直角转经纬度:
// 先将 3D 笛卡尔坐标转为地理坐标(弧度)
const cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
// 再将地理坐标(弧度)转为经纬度
const lat = Cesium.Math.toDegrees(cartographic.latitude);
const lng = Cesium.Math.toDegrees(cartographic.longitude);
const height = cartographic.height;
首先把空间直角坐标系中的点(cartesian3)转换为地理坐标(弧度)表示的 Cartographic 对象,然后再把这个对象中的纬度和经度从弧度转换为角度,就得到了经纬度坐标,同时还能得到高度值。
- 屏幕坐标转经纬度:
// 监听点击事件,拾取坐标
const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction((e) => {
const clickPosition = viewer.scene.camera.pickEllipsoid(e.position);
const radiansPos = Cesium.Cartographic.fromCartesian(clickPosition);
console.log(
"经度:" +
Cesium.Math.toDegrees(radiansPos.longitude) +
", 纬度:" +
Cesium.Math.toDegrees(radiansPos.latitude)
);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
这里是通过监听屏幕的点击事件,当用户在屏幕上点击时,获取点击位置对应的地球上的点(clickPosition),然后把这个点从笛卡尔坐标转换为地理坐标(弧度)表示的对象,最后再把这个对象中的经度和纬度从弧度转换为角度,就得到了点击位置对应的经纬度坐标。
- 屏幕坐标转空间直角坐标:
var cartesian3 = viewer.scene.globe.pick(viewer.camera.getPickRay(windowPostion), viewer.scene);
根据屏幕坐标(windowPostion),通过相机的射线拾取方法,获取对应的空间直角坐标系中的点。
- 世界坐标转屏幕坐标:
windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3);
把世界坐标(一般是经纬度坐标转换后的空间直角坐标)表示的点(cartesian3)转换为屏幕坐标(windowPostion)。
GISer世界
面试题