Cesium常用坐标系统
1. 笛卡尔平面坐标(Cartesian2)
new Cesium.Cartesian2(x, y)
2. 笛卡尔空间直角坐标(Cartesian3)
new Cesium.Cartesian3(x, y, z)
3. 地理坐标(Cartographic)
注:默认弧度
new Cesium.Cartographic(longitude, latitude, height)
4. 屏幕坐标
项目实践过程中的坐标转换
这里是根据自己在项目中获取坐标的顺序来展示基本的坐标转换
1. 获取鼠标点在屏幕中的坐标
// 获取画布
var canvas = viewer.scene.canvas;
var mouseHander = new Cesium.ScreenSpaceEventHandler(canvas);
// 绑定鼠标左点击事件
mouseHander.setInputAction(function (event){
// 获取鼠标点的windowPosition
var windowPosition = event.position;
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);)
2. 屏幕坐标转换为笛卡尔空间直角坐标
var ray = viewer.camera.getPickRay(windowPosition);
var cartesian = viewer.scene.globe.pick(ray, viewer.scene);
3. 三维笛卡尔空间直角坐标转换为地理坐标
3.1 三维笛卡尔空间直角坐标转换为地理坐标(弧度)
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartographic=ellipsoid.cartesianToCartographic(cartesian);
3.2三维笛卡尔空间直角坐标转换为地理坐标(经纬度)
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartographic=ellipsoid.cartesianToCartographic(cartesian);
var lat=Cesium.Math.toDegrees(cartographic.latitude);
var lng=Cesium.Math.toDegrees(cartographic.longitude);
var alt=cartographic.height;
4.上述坐标转换的反向转换
4.1 经纬度转换为笛卡尔空间直角坐标
- 直接转换
# Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
var position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0);
- 先转换为弧度,再进行转换
var ellipsoid=viewer.scene.globe.ellipsoid;
var cartographic=Cesium.Cartographic.fromDegrees(lng, lat, alt);
var cartesian = ellipsoid.cartographicToCartesian(cartographic);
4.2 笛卡尔空间直角坐标转换为屏幕坐标
var pick = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian);
常见的其他转换
此处仅举几个例子,详细内容大家可以参照各个坐标系统的API
1. 三维笛卡尔坐标转换为二维笛卡尔坐标
Cesium.Cartesian2.fromCartesian3(cartesian, result)
2. 弧度与经纬度的相互转换
- 经纬度转换为弧度
Cesium.CesiumMath.toRadians(degrees)
- 弧度转换为经纬度
Cesium.CesiumMath.toDegrees(radians)