大家好!今天我来给大家聊一下 Cesium 的坐标系统,并顺带走一趟 GIS(地理信息系统) 专业的“坐标世界”。听到“坐标系统”这个词,可能有的小伙伴会联想到数学课上那些看似复杂的公式,其实不然。其实,无论是在 2D 地图中定位,还是在 3D 虚拟地球中精确地描绘一个点,坐标系统都是给我们提供位置的基础工具。
什么是坐标系统?(GIS 坐标系统的基本概念)
在开始聊 Cesium 之前,我们得先了解一下什么是坐标系统,尤其是 GIS 中的坐标系统。坐标系统是用来描述地理空间中点的位置的,它相当于地球上的“身份证”。用它可以帮助我们精确定位任何一个地点,从北京的故宫到亚马逊的热带雨林,都可以通过坐标系统告诉我们它具体在哪里。
-
地理坐标系统(Geographic Coordinate System, GCS)
- 经纬度:最常见的坐标系统就是通过 经度(Longitude) 和 纬度(Latitude) 来定义位置。经度表示东西位置,纬度表示南北位置。举个例子,北京的坐标就是 39.9042° N(纬度)和 116.4074° E(经度)。这些就是我们通常说的“经纬度”。
- 角度单位:这个坐标系统基于地球的球形结构,单位通常是度(°),这让它在全球范围内都能使用。
-
投影坐标系统(Projected Coordinate System, PCS)
- 这个坐标系统则将地球的曲面展平成二维,适用于各种地图应用。比如,常见的 墨卡托投影 就是把地球表面的经纬度信息转换成平面坐标,从而展示在地图上。这个坐标系统通常用于大多数的在线地图或专业地图应用中。
- 这个坐标系统则将地球的曲面展平成二维,适用于各种地图应用。比如,常见的 墨卡托投影 就是把地球表面的经纬度信息转换成平面坐标,从而展示在地图上。这个坐标系统通常用于大多数的在线地图或专业地图应用中。
总结一下,GIS 中的坐标系统大体分为两类:一个是“球面坐标” —— 主要是用经纬度来表示,另一个是“平面坐标” —— 通过某种投影方式把地球表面“压平”,方便在 2D 空间中使用。
Cesium 默认的坐标系统:地心地固坐标系(ECEF)
Cesium 默认使用的是 地心地固坐标系(Earth-Centered, Earth-Fixed, ECEF)。说白了,Cesium 就是站在地球的中心,通过三维坐标来定义地球上的任何一个点。这就像我们用三根轴线来描述空间中的位置——和 GIS 的经纬度坐标系不同,Cesium 是 三维空间坐标,而且它的坐标原点在地球的中心。
-
原点和坐标轴:
- 原点:地球的中心。假设我们站在地球的核心,坐标(0, 0, 0)就是原点。
- X 轴:指向赤道与 0° 经线交点。
- Y 轴:指向赤道与 90° 经线交点。
- Z 轴:指向地球的北极。也就是说,Z 轴决定了你是在北极上方还是南极下方。
-
三维坐标: 在 ECEF 坐标系统中,每个点的位置由三个数值(X, Y, Z)表示。可以简单地理解为:
- X 表示东-西方向的位置
- Y 表示北-南方向的位置
- Z 表示上下高度,也就是相对于地球中心的垂直距离
这个坐标系在 Cesium 中应用非常广泛,因为它能非常准确地表示三维空间中的点,不论是地球上的任何一个地点,还是卫星在轨道上的位置,都可以通过这三维坐标系统来定义。
WGS84 坐标系统——默认坐标系统
WGS84(World Geodetic System 1984)是全球最常见的地理坐标系统,也是 Cesium 默认的地理坐标系统。它是基于地球椭球体模型(而不是球体)建立的,因此比传统的地理坐标系统(如地球球形模型)要精确得多。简单来说,WGS84 是一个 椭球坐标系,它在全球范围内使用,经常用来表示经纬度和高度。
- 经纬度(Latitude & Longitude):WGS84 坐标系统通过经度和纬度来确定一个点的地理位置,通常是地球表面的一个位置。
- 椭球体模型:WGS84 基于一个被称为“WGS84 椭球体”的模型,它近似表示地球的形状(即地球不是一个完美的球体,而是稍微扁平的)。因此,WGS84 提供了更加精确的全球定位数据。
墨卡托投影——将地球“平铺”
为了把 地球表面 显示到平面地图上,墨卡托投影是一种最常见的地图投影方法。这种投影将 经纬度 转换为 平面坐标,并且保持了直线和角度的准确性。因此,它非常适合航海和制图应用,因为航行者可以直接根据直线测量航行路径。
但需要注意的是,墨卡托投影的一个问题就是它会扭曲地球两极的区域。也就是说,靠近极地的地方会被“拉伸”,比如格林兰岛和南极的地区会显得比实际大得多。
如何在 Cesium 中使用坐标系统
在 Cesium 中,我们可以通过多种方式来处理和显示坐标数据:
- 经纬度到 ECEF 坐标系的转换:Cesium 提供了丰富的 API,可以轻松地将经纬度转换为 ECEF 坐标系中的三维坐标。
- 世界坐标系:你可以通过 Cesium 提供的 API,获取任何位置的三维坐标(无论是经纬度,还是直接的 X, Y, Z 坐标),并在 3D 地球上显示出来。
举个例子,假设你想把北京的经纬度(39.9042° N, 116.4074° E)转换成 ECEF 坐标,可以使用 Cesium 提供的 Cartographic.toCartesian
方法来实现:
var viewer = new Cesium.Viewer('cesiumContainer');
var longitude = 116.4074;
var latitude = 39.9042;
var height = 0; // 海平面高度
var cartesian = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
console.log(cartesian); // 输出 ECEF 坐标系中的 X, Y, Z
这个代码会将北京的经纬度转换为 ECEF 坐标系中的三维坐标。