天天看点

Cesium常用坐标系统和转换Cesium常用坐标系统项目实践过程中的坐标转换常见的其他转换

文章目录

  • Cesium常用坐标系统
    • 1. [笛卡尔平面坐标(Cartesian2)](https://cesiumjs.org/refdoc/)
    • 2. [笛卡尔空间直角坐标(Cartesian3)](https://cesiumjs.org/refdoc/)
    • 3. [地理坐标(Cartographic)](https://cesiumjs.org/refdoc/)
    • 4. 屏幕坐标
  • 项目实践过程中的坐标转换
    • 1. 获取鼠标点在屏幕中的坐标
    • 2. 屏幕坐标转换为笛卡尔空间直角坐标
    • 3. 三维笛卡尔空间直角坐标转换为地理坐标
      • 3.1 三维笛卡尔空间直角坐标转换为地理坐标(弧度)
      • 3.2三维笛卡尔空间直角坐标转换为地理坐标(经纬度)
    • 4.上述坐标转换的反向转换
      • 4.1 经纬度转换为笛卡尔空间直角坐标
      • 4.2 笛卡尔空间直角坐标转换为屏幕坐标
  • 常见的其他转换
    • 1. 三维笛卡尔坐标转换为二维笛卡尔坐标
    • 2. 弧度与经纬度的相互转换

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)
           

继续阅读