坐标系
屏幕坐标(二维笛卡尔坐标):屏幕坐标定义了在用户的显示屏上的像素位置。例如,一个点的屏幕坐标可能是
(x, y)
,Cesium
中使用Cartesian2
来描述,原点在屏幕左上角,x轴向右,y轴向下,单位为像素px
三维笛卡尔坐标:在
Cesium
中,地球通常在(0,0,0)
笛卡尔坐标中被建模,如飞机或卫星的位置通常由其在这个笛卡尔空间中的位置表示,Cesium
中使用Cartesian3
来描述,原点在地球中心,x轴向东,y轴向北,z轴向上,单位为米z轴指向地极(北极)方向
x轴指向零度子午面(0度经线)和赤道的交点
y轴通过右手规则确定
地理坐标系(
GCS
):地理坐标系是一个基于三维地球表面的坐标系统,它使用经度和纬度来表示地点的位置,格式:[120, 30, 100.0]
,高度默认为0,可以不写,Cesium
中通过Cartographic
来描述,Cartographic
的单位为:弧度/弧度/米投影坐标系(
PCS
):投影坐标系是一个基于二维平面的坐标系统,它是通过将地球(或其部分)投影到一个平面上来得到的,使用X和Y坐标(在平面上)来定义位置
基本转化
地理坐标转三维笛卡尔坐标
js
// 传入的参数分别为:经度(度) 纬度(度) 高度(米)
const Cartesian3 = Cesium.Cartesian3.fromDegrees(114, 30, 1000)
三维笛卡尔坐标转地理坐标
js
//第一步:笛卡尔转弧度
let cartographic = Cesium.Cartographic.fromCartesian(Cartesian3)
console.log(cartographic)
//第二步:弧度坐标转角度坐标
let lon = Cesium.Math.toDegrees(cartographic.longitude)
let lat = Cesium.Math.toDegrees(cartographic.latitude)
console.log(lon)
console.log(lat)
console.log(cartographic.height)
角度和弧度的转化
js
角度转弧度:let radians = Cesium.Math.toRadians(degrees)
弧度转角度:let degrees = Cesium.Math.toDegrees(radians)
获取屏幕上的坐标
js
// 获取画布
var canvas = viewer.scene.canvas;
var handler = new Cesium.ScreenSpaceEventHandler(canvas);
// 绑定鼠标左点击事件
handler.setInputAction((event) => {
// 获取鼠标点左键点击的屏幕坐标
var windowPosition = event.position;
console.log(windowPosition)
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);)
屏幕坐标转化为三维笛卡尔坐标
js
var ray = viewer.camera.getPickRay(windowPosition);
var cartesian3 = viewer.scene.globe.pick(ray, viewer.scene);
或者使用:
js
var cartesian = viewerInstance.camera.pickEllipsoid(event.position, viewerInstance.scene.globe.ellipsoid);
三维笛卡尔坐标转化为屏幕坐标
js
var windowPos = Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, Cartesian3);