Cesium中的坐标系统简单说明
创作时间:
作者:
@小白创作中心
Cesium中的坐标系统简单说明
引用
CSDN
1.
https://blog.csdn.net/hap1994/article/details/139521720
Cesium是一款功能强大的开源3D地球和地图可视化工具,广泛应用于地理信息系统、虚拟现实等领域。在使用Cesium进行开发时,理解其坐标系统及其转换方法是至关重要的。本文将详细介绍Cesium中的三种坐标系统:地理坐标、世界坐标和屏幕坐标,并提供具体的转换方法和代码示例。
一、坐标系统
Cesium中坐标系统主要分为三种:地理坐标、世界坐标(X,Y,Z)和屏幕坐标。
- 地理坐标:通常用于位置表达,可以采用经纬度或弧度两种方式表示。
- 世界坐标:采用右手系的笛卡尔空间直角坐标系,原点位于椭球中心。在Cesium中,使用
Cartesian3
类表示,类似于三维系统中的Point3D
对象。 - 屏幕坐标:用于表示屏幕显示的二维坐标,左上角为坐标原点,常用于用户交互。
二、坐标转换
1. 角度和弧度互转
var radians = Cesium.Math.toRadians(degrees); // 经纬度转弧度
var degrees = Cesium.Math.toDegrees(radians); // 弧度转经纬度
2. 地理经纬度转地理弧度
// 方法一:
var longitude = Cesium.Math.toRadians(lng); // 其中 lng为经度
var latitude = Cesium.Math.toRadians(lat); // 其中 lat为纬度
var cartographic = new Cesium.Cartographic(longitude, latitude, height);
// 方法二:
var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, height); // 其中,lng和lat为经纬度
// 方法三:
var cartographic = Cesium.Cartographic.fromRadians(longitude, latitude, height); // 其中,longitude和latitude为弧度
3. 经纬度转世界坐标
lnglatToCartesian(lng, lat, height) {
// 直接转换
var cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height);
// 先转弧度后转笛卡尔
// var cartographic = Cesium.Cartographic.fromDegrees(lng, lat, height); // 单位:度,度,米
// var ellipsoid = viewer.scene.globe.ellipsoid;
// var cartesian3 = ellipsoid.cartographicToCartesian(cartographic);
return cartesian3;
}
4. 世界坐标转经纬度
Cesium不支持笛卡尔坐标直接转经纬度,需要先转换为弧度,再由弧度转化为经纬度
cart3Tolnglat(cartesian3) {
var ellipsoid = this._viewer.scene.globe.ellipsoid;
const cartograhphic = ellipsoid.cartesianToCartographic(cartesian3);
var lat = Cesium.Math.toDegrees(cartograhphic.latitude);
var lng = Cesium.Math.toDegrees(cartograhphic.longitude);
var height = cartographic.height;
return [lng, lat, height];
}
5. 世界坐标转屏幕坐标
var cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3);
6. 屏幕坐标转世界坐标
坐标获取
var handler = new Cesium.ScreenSpaceEventHandler(viewer.canvas);
handler.setInputAction(function (event) {
// event.position为屏幕坐标
console.log(event.position);
// 获取包含了地形、倾斜摄影表面、模型的世界坐标
// 解决在没有3dTile模型下的笛卡尔坐标不准问题, viewer.scene.globe.depthTestAgainstTerrain = true; // 默认为false
var pickedPosition = viewer.scene.pickPosition(event.position);
if (Cesium.defined(pickedPosition)) {
console.log('1', pickedPosition);
}
// 获取地球表面的世界坐标,包含地形,不包含其他模型
// Create a ray from the camera position through the pixel at windowPosition in world coordinates.
var ray = viewer.camera.getPickRay(event.position);
// Find an intersection between a ray and the globe surface that was rendered. The ray must be given in world coordinates.
var position2 = viewer.scene.globe.pick(ray, viewer.scene);
console.log('2', position2);
// 获取参考椭球的世界坐标
var position3 = viewer.scene.camera.pickEllipsoid(event.position, viewer.scene.globe.ellipsoid);
console.log('3', position3);
}, Cesium.ScreenSpaceEventType.LEFT_CLICK);
本文详细介绍了Cesium中的坐标系统及其转换方法,对于学习Cesium开发的读者具有较高的参考价值。通过本文,读者可以更好地理解Cesium中的坐标系统,掌握各种坐标之间的转换方法,从而更高效地进行开发工作。
热门推荐
在职场中,如何应对领导的打压?很多人一开始就做错了
壬日水木伤官格好不好,雨凡说易学壬水日主
晚婚命理分析,八字预测未来
属蛇和属狗的婚姻:二婚和谐度分析
企业倒闭退休工资谁发?法律专家详解
结束一段关系,最体面的退场方式,不是删除拉黑,而是这样做
路由器指示灯不亮?一篇文章教你快速解决!
这4个小动作,竟然是养生长寿的秘诀
芹菜:天然护齿神器,一口脆爽远离蛀牙
喝牛奶吃茶,远离蛀牙困扰!
氟化物+抗菌肽:双重防蛀新趋势
涂氟防蛀牙,孩子牙齿守护神!
宁波桑田路再登龙虎榜:5054万买入拓维信息助力涨停
CNAS实验室认可新趋势:提升公信力与国际竞争力
CNAS认证:提升企业竞争力的金钥匙
秋冬咳嗽嗓子哑?中医调理有妙招!
秋冬止咳护嗓全攻略:喻清和医生推荐食疗方案及日常护理要点
猕猴桃:嗓子哑的救星?
家庭环境如何塑造了你的INFJ特质?
温柔而严谨:INFJ父母如何育儿?
南京必打卡美食榜单:味蕾上的金陵盛宴
南京必打卡:博物院&秦淮河
C#中的异步编程如何实现,有哪些最佳实践?
海参常见生活习性详解
章泽天回应独眼胸针风波:一场网络暴力事件的始末
石河子大学专家:青少年如何应对网络暴力?
遗尿症科普:应对策略与心理压力缓解指南
怎样通过创新创业PPT提升观众的兴趣和参与度?
如何利用 PPT 进行数据可视化和展示
INFJ父母如何培养孩子的独立性?