1. Cesium坐标系
Cesium
中常用坐标有两种,分别为WGS84地理坐标系和笛卡尔空间坐标系,笛卡尔空间坐标系也叫做世界坐标系。
1.1WGS84地理坐标系
我们使用经度来表示一个点时,使用的就是WGS84地理坐标系,它是为GPS
全球定位系统使用而建立的坐标系统,它是以地球质心为原点,其经纬度范围分别为[-180,180]
和[-90,90]
。
1.2笛卡尔空间坐标系
笛卡尔空间坐标的原点就是椭球的中心,在计算机上进行绘图时,是将经纬度转换成笛卡尔坐标来进行绘图,我们在Cesium
中使用的3D笛卡尔坐标类为Cartesian3
,传递x
,y
,z
进行初始化,如
new Cesium.Cartesian3 ( x , y , z )
1.3 平面坐标系
平面坐标系就是平面直角坐标系,就是我们在平面图中使用的坐标 ,就一个x
和y
,使用Cartesian2
进行初始化,我们使用的屏幕坐标就是平面坐标系统,鼠标在地图上点击位置时,返回的就是一个Cartesian2
对象,可以通过x
和y
来获取对应的屏幕坐标。
2.坐标转换
2.1 屏幕坐标转世界坐标
使用ScreenSpaceEventHandler
点击屏幕,获取到鼠标点击处的位置,从场景的深度缓冲区中拾取相应的位置将其转换成世界坐标。
var handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
handler.setInputAction(function (movement) {
var ray = viewer.camera.getPickRay(movement.position);
var cartesian3 = viewer.scene.globe.pick(ray, viewer.scene);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
2.2 世界坐标转屏幕坐标
使用SceneTransforms
中的wgs84ToWindowCoordinates
方法可以很方便的将世界坐标转换成屏幕坐标,如下所示:
let cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3);
2.3 世界坐标转经纬度坐标
首先将世界坐标转换成弧度地理坐标,再使用toDegrees
来将弧度转成经纬度。
const cartesignToWGS84 = function (viewer, cartesian3) {
var ellipsoid = viewer.scene.globe.ellipsoid;
var cartographic = ellipsoid.cartesianToCartographic(cartesian3);
var lat = Cesium.Math.toDegrees(cartographic.latitude);
var lng = Cesium.Math.toDegrees(cartographic.longitude);
var alt = cartographic.height;
return {
lng: lng,
lat: lat,
height: alt
}
}
2.4 经纬度坐标转世界坐标
const wgs84ToCartesign = function (viewer, lng, lat, alt) {
var ellipsoid = viewer.scene.globe.ellipsoid;
var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, alt);
var cartesian3 = ellipsoid.cartographicToCartesian(cartographic);
return cartesian3;
}