欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

铯-2.铯坐标转换中的坐标系和转换

最编程 2024-03-31 07:38:10
...

[1]角度与弧度的转换

//角度转弧度
var radians = Cesium.CesiumMath.toRadians(degrees)
//弧度转角度
var degrees = Cesium.CesiumMath.toDegrees(radians)

[2]地理坐标转Cartesian3

Cesium在绘图过程中需要使用笛卡尔空间直角坐标(如WGS84笛卡尔坐标系),因此需要将经纬度坐标转换为笛卡尔坐标,才能用于绘图。 cartographic:弧度制表示的地理坐标系。使用(经度,纬度,大地高)表示。

(1)直接经过经纬度转换
角度制的地理坐标转Cartesian3

直接转换:

Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
ellipsoid:该Cartesian3所使用的椭球,默认为Ellipsoid.WGS84
result:存储结果的对象
Cesium.Cartesian3.fromDegreesArray(coordinates, ellipsoid, result)
coordinates:经纬度数组列表,用于批量转换[经度,纬度,进度,纬度,。。。。]
let cartesian3s = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);
coordinates:[经度,纬度,高度,进度,纬度,高度]
弧度制与笛卡尔转换

弧度制也类似,使用Cesium.Cartesian3.fromRadians, Cesium.Cartesian3.fromRadiansArray, Cesium.Cartesian3.fromRadiansArrayHeights

(2)使用椭球体转换
//先转换为弧度坐标
let position = Cesium.Cartographic.fromDegrees(lon, lat, height);
//获取viewer椭球体实例
let ellipsoid = viewer.scene.globe.ellipsoid;
//开始转换
let cartesian3 = ellipsoid.cartographicToCartesian(position);
// 多个坐标
let cartesian3s = ellipsoid.cartographicArrayToCartesianArray(positions);

[3]Cartesian3转地理坐标

(1)直接转换
//直接转换得到的是WGS84弧度制的经纬度坐标,可将其再转换为角度制。
let cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
(2)通过椭球体转换
//需要选着或创建地理坐标的椭球体参数
// 单个坐标
let cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);
// 多个坐标
let cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographic(cartesain3Array);

[4]Cartesian2与Cartesian3互转

屏幕坐标和迪卡尔空间直角坐标系的转换

(1)Cartesian2转Cartesian3

屏幕转椭球面笛卡尔坐标,不包含地形、模型等的坐标 Cesium中的Camera提供了pickEllipsoid方法:传送门

let cartesain3 = viewer.scene.camera.pickEllipsoid(cartesian2);

屏幕转场景坐标,包含地形和模型等的场景空间坐标 使用Scene类中的pickPosition方法实现:传送门

let cartesian3 = viewer.scene.pickPosition(cartesian2);

屏幕坐标转地表笛卡尔空间坐标 通过相机与屏幕点位连线来求取坐标。 使用Scene类中globe属性中的pick方法:

let ray = viewer.camera.getPickRay(cartesian2);
let cartesian3 = globe.pick(ray,viewer.scene);
(2)Cartesian3转Cartesian2

Cesium提供了SceneTransforms的wgs84ToWindowCoordinates方法将笛卡尔坐标转换为屏幕坐标

let cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(cartesian3);

推荐阅读