2023-01-11

1.坐标系

Cartesian3
笛卡尔坐标,又叫世界坐标,是一个三维空间中的点 ,具有xyz,类似:(-1314910.6675027965, 5328726.846411945, 3238183.748823095),单位为米

原点在椭球中心

 
Cartesian2
是二维空间中的点,通常是屏幕坐标
console.log(`鼠标点击位置为:${click.position}`);
 鼠标点击位置为:(372.79998779296875, 213.7999997138977)
屏幕左上角为原点,向右为x正方向,向下为y正方向
 
 
cartographic 
和Cartesian3一样是三维空间中的点,但是单位是弧度,通常也叫椭球坐标
当世界坐标为:(-1315009.0349616667, 5329125.484381694, 3238427.62747913),
此时对应的cartographic为:(1.8127222052449903, 0.5359692831389684, 492.5617098962376)
第三个参数是海拔,单位为米。
 
 
经纬度
Cesuim中没有具体的经纬度对象,要得到经纬度首先需要计算为弧度,再进行转换。
 
 

2.坐标转换

2.1 转换为经纬度

其实在实际应用中最常用的就是经纬度,我们先将如何转换为经纬度

2.1.1 cartographic 转经纬度(弧度转经纬度)

这是最简单的,弧度和经纬度是可以直接按照数学公式计算的。

Cesium的Math库也提供了函数进行计算:

          // 弧度转换为经纬度
var lon = Cesium.Math.toDegrees(cartographic.longitude); // 经度
var lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
console.log(`经度:${lon},纬度:${lat}`);

2.1.2 Cartesian3转经纬度(世界坐标/笛卡尔坐标 转经纬度)

由于已经知道如果有弧度的话就可以计算得到经纬度,所以问题转换为如何将世界坐标转换为椭球坐标。

找到了如下方法

可以直接用Cartesian3创建一个弧度坐标。

          var x = Cesium.Cartographic.fromCartesian(new Cesium.Cartesian3.fromDegrees(100,30,500))
console.log(`100,30,500对应的弧度:${x}`);

100,30,500对应的弧度:(1.7453292519943295, 0.5235987755982987, 499.9999999999014)

2.1.3 屏幕坐标转经纬度

在camera里有这么一个方法

返回一个Cartesian3也就是笛卡尔坐标系下的点

 click是点击事件,这里不用管

          console.log(`鼠标点击位置为:${click.position}`);

          var cartesian = that.viewer.scene.globe.pick(that.viewer.camera.getPickRay(click.position),that.viewer.scene);

          console.log(`世界坐标:${cartesian}`);

鼠标点击位置为:(367.20001220703125, 233.00003337860107)

 世界坐标:(-1296852.0512911458, 5257755.129365052, 3210992.6158761424)
 
 Cartesian3怎么转经纬度不用说了吧
           //转换为弧度
var x = Cesium.Cartographic.fromCartesian(cartesian);
console.log(x);
//弧度转经纬度
var lon = Cesium.Math.toDegrees(cartographic.longitude); // 经度
var lat = Cesium.Math.toDegrees(cartographic.latitude); // 纬度
console.log(`经度:${lon},纬度:${lat}`);

2.2 经纬度转换为其他

2.2.1 经纬度转换为弧度

          //经纬度转弧度
var cartographic=Cesium.Cartographic.fromDegrees(lon,lat,height);
console.log(cartographic);
 

2.2.2 经纬度转换为世界坐标

Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result);

很明显,fromDegrees这个方法就是从经纬度转换为某某坐标系下的方法

2.2.3 经纬度转换为屏幕坐标

          var c3 = Cesium.Cartesian3.fromDegrees(new Cesium.Cartesian3(100,30,500));

          //笛卡尔坐标转屏幕坐标
var c2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(that.viewer.scene, c3);
console.log(c2);

原点是viewer的原点

3. 总结

我们可以画一条线

Cartesian2 -> Cartesian3 -> cartographic -> 经纬度

这条线往返转换的方法都讲了,依次转换就可以了

中间应该还有一些跳步骤的方法,比如Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result),经纬度直接转换为世界坐标

后面再更新

 
 
 
 
 

最新文章

  1. 【Android环境搭建】解决安装使用SDK Manager更新时的问题
  2. Vs2012(Vs2013) 编译 64位 Qt (动态库), 并使用自编译Qt建立工程(悲催经历)。(含遗留问题)
  3. 客户端调用服务端webservice的端口问题
  4. OpenSessionInViewFilter 的配置及作用
  5. mysql 权限篇
  6. 创建FrameWork
  7. centos vpn
  8. C Primer Plus(第五版)10
  9. SRM 388(1-250pt)
  10. Photoshop调出清晰的阴雨天气山水风景照
  11. Java 非静态内部类中可以定义静态变量或方法吗?
  12. PlantUml 使用代码画各种图
  13. [持续交付实践] pipeline使用:Multibranch Pipeline
  14. odoo开发笔记 -- 字段增加唯一约束
  15. 软件工程——移动的HelloWorld
  16. python 读取文件第一列 空格隔开的数据
  17. 谁说delphi没有IOCP库,delphi新的IOCP类库,开源中: DIOCP组件JSON流模块说明
  18. 绝对震撼 10个实用的jQuery/HTML5插件
  19. HHVM中文网
  20. LeetCode—Longest Consecutive Sequence

热门文章

  1. python实现AES加密解密
  2. 卸载virtualbox中linux虚拟机的增强工具
  3. JavaSE流程学习图
  4. 物联网 IOT 设备如何脱离信息孤岛?
  5. 前端必备ps切图方法,拿下ui设计师就靠它了。
  6. [机器学习] Yellowbrick使用笔记7-聚类可视化
  7. Ynoi 数据结构题选做
  8. CentOS7.6搭建Hadoop2.7.2运行环境-三节点集群模式
  9. elasticsearch之单请求多查询
  10. 又一重要进展发布!OpenMMLab算法仓支持昇腾AI训练加速