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中的坐标系统,掌握各种坐标之间的转换方法,从而更高效地进行开发工作。
热门推荐
美海军拟扩大"星链"应用
向上管理的8个实用技巧
甄宝玉与贾宝玉:镜中幻影,命运交织
分时四驱与适时四驱的区别:谁更适合越野?
雾霾的形成原因及其治理措施,你必须了解!
裘千仞到底有多厉害?一双铁掌精妙绝伦,武功不在欧阳锋之下
装修费用是否影响房屋建筑物折旧年限?
北斗七星:夜空中最亮的指引
发生眩晕别乱治,尽早就诊排查治疗
红肿硬块脓包:皮肤小危机的应对策略
眼底充血是什么原因?怎样治疗呢
自学直考驾照报名基本流程
酶标仪的工作原理和操作流程
MACD背离比较的方法有哪些?运用这些方法时需要注意什么?
网关配置全攻略:从入门到精通的实用指南
科目二预约几点开始?预约成功率如何提高?
僵尸真实存在吗? 科学视角下的解析
舌苔发黄口苦怎么调理
香河旅游全攻略:运河风光、万亩荷塘与特色文化
女孩起名:以月为名,清冷惊艳的女孩名字
中医舌苔辩证图解
劳动合同未签的追诉期及维权途径详解
高血压患者适合哪些运动?三种运动方式及注意事项
竹结构的结构稳定性应该如何保证?
如何整理图片数据库:从基础到进阶的全面指南
什么是基金的申购与赎回?申购赎回过程中有哪些注意事项?
预算编制实务指南:轻松规划财务、打造成功之路
合肥至厦门三日游:文化探索与自然风光的完美结合
LED灯的光谱特性解析:是否含有UVA和UVB?
为什么人工智能使用GPU而不使用CPU?