Skip to content

坐标系

  • 屏幕坐标(二维笛卡尔坐标):屏幕坐标定义了在用户的显示屏上的像素位置。例如,一个点的屏幕坐标可能是(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);

Released under the MIT License.