Cesium坐标系及转换

1. Cesium坐标系

Cesium中常用坐标有两种,分别为WGS84地理坐标系笛卡尔空间坐标系,笛卡尔空间坐标系也叫做世界坐标系。

1.1WGS84地理坐标系

我们使用经度来表示一个点时,使用的就是WGS84地理坐标系,它是为GPS全球定位系统使用而建立的坐标系统,它是以地球质心为原点,其经纬度范围分别为[-180,180][-90,90]

1.2笛卡尔空间坐标系

笛卡尔空间坐标的原点就是椭球的中心,在计算机上进行绘图时,是将经纬度转换成笛卡尔坐标来进行绘图,我们在Cesium中使用的3D笛卡尔坐标类为Cartesian3,传递xyz进行初始化,如

new Cesium.Cartesian3 ( x , y , z )

1.3 平面坐标系

平面坐标系就是平面直角坐标系,就是我们在平面图中使用的坐标 ,就一个xy,使用Cartesian2进行初始化,我们使用的屏幕坐标就是平面坐标系统,鼠标在地图上点击位置时,返回的就是一个Cartesian2对象,可以通过xy来获取对应的屏幕坐标。

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;
}

你可能感兴趣的:(Cesium坐标系及转换)