cesium-坐标转换
2022-01-20 本文已影响0人
姜治宇
弧度和角度
度和弧度都是衡量角的大小的单位,就像米(m)和英寸(in)都是用来衡量长度的单位。度用°来表示,弧度用rad表示。
度和弧度之间可以相互转换,转换规则为:
1rad = (180/π)° ≈ 57.3°
1° = (π/180)rad ≈ 0.01745rad
比如求90°角的弧度,就是:
0.01745*90=1.5705rad
经纬度
提到经纬度,一般是指角度。经度的范围在[-180,180],而纬度在[-90,90]。当然我们也可以换算成弧度。cesium的api,有些需要传弧度,有些是角度,使用前一定要仔细阅读。
var cartographic_rad= new Cesium.Cartographic(1.9, 0.6, 0);//经纬度参数,需要传弧度
console.log(cartographic_rad);//Cartographic {longitude: 1.9, latitude: 0.6, height: 0}
//弧度转为角度
let lon = Cesium.Math.toDegrees(cartographic_rad.longitude);
let lat = Cesium.Math.toDegrees(cartographic_rad.latitude);
console.log(`经度:${lon}°,纬度:${lat}°`);//经度:108.8619810748564°,纬度:34.37746770784939°
//角度转为弧度
let lon_rad = Cesium.Math.toRadians(108.8619810748564);
let lat_rad = Cesium.Math.toRadians(34.37746770784939);
console.log(`经度(弧度):${lon_rad}rad,纬度(弧度):${lat_rad}rad`);//经度(弧度):1.9rad,纬度(弧度):0.6rad
世界坐标
世界坐标,表示以球心为原点的空间直角坐标系,可以与经纬度之间做转换。
//======经纬度转世界坐标===========//
let cartesian = Cesium.Cartesian3.fromRadians(1.9,0.6,0);
console.log(cartesian);//Cartesian3 {x: -1703648.8084007443, y: 4986746.192953569, z: 3581081.741917722}
let cartesianDeg = Cesium.Cartesian3.fromDegrees(108.8619810748564,34.37746770784939,0);
console.log(cartesianDeg);//Cartesian3 {x: -1703648.8084007443, y: 4986746.192953569, z: 3581081.741917722}
//===========世界坐标转经纬度========//
let cartographic = Cesium.Cartographic.fromCartesian(cartesian);
console.log(cartographic);//Cartographic {longitude: 1.9000000000000001, latitude: 0.6000000000000001, height: -1.3969838619232178e-9}
//弧度转为角度
let longitude = Cesium.Math.toDegrees(cartographic.longitude);
let latitude = Cesium.Math.toDegrees(cartographic.latitude);
console.log(`经度:${longitude}°,纬度:${latitude}°`);//经度:108.86198107485642°,纬度:34.3774677078494°
实体的位置一般是用世界坐标。
let viewer = new Cesium.Viewer('cesiumContainer');
viewer.entities.add({
name: 'this is a box',
position: Cesium.Cartesian3.fromDegrees(-107.0, 40.0, 300000.0),//经纬度转世界坐标
box: {
dimensions: new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),//世界坐标 Cartesian3 {x: 400000, y: 300000, z: 500000}
material: Cesium.Color.YELLOW.withAlpha(0.5)
}
});