cesium学习记录04-坐标系

这篇具有很好参考价值的文章主要介绍了cesium学习记录04-坐标系。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、屏幕坐标

这些坐标定义了在用户的显示屏上的像素位置。例如,一个点的屏幕坐标可能是(x, y),其中x是从屏幕的左边开始的像素数,y是从屏幕的顶部开始的像素数。

二、三维笛卡尔坐标

这是一个三维空间中的点的坐标。在Cesium中,地球通常在(0,0,0)笛卡尔坐标中被建模。其他对象(如飞机或卫星)的位置通常由其在这个笛卡尔空间中的位置表示。

三、地理坐标系和投影坐标系

地理坐标系 (Geographic Coordinate System, GCS)

定义:地理坐标系是一个基于三维地球表面的坐标系统。它使用经度和纬度来表示地点的位置。
特点:
使用经纬度来定义位置。
基于特定的地球参考椭球体。
适用于全球范围的数据表示。
主要问题:由于地球是一个椭球体,直接使用经纬度坐标计算距离、面积或方向会产生误差。

投影坐标系 (Projected Coordinate System, PCS)

定义:投影坐标系是一个基于二维平面的坐标系统。它是通过将地球(或其部分)投影到一个平面上来得到的。
特点:
使用X和Y坐标(在平面上)来定义位置。
能够直接计算距离、面积和方向,因为它是在二维平面上。
所有的投影都会有某种形式的扭曲,无法完美地将地球的三维表面表示在二维平面上。
主要用途:适用于地图制作和本地/区域空间分析。

它们之间的关系:

投影是一个过程,通过它,地理坐标系(GCS)中的数据(经纬度)可以转换为投影坐标系(PCS)中的数据(X, Y坐标)。反之亦然。
由于地球是一个椭球体(或近似为一个凸形的物体),我们不能直接将其完美地展平到二维平面上。因此,当我们进行投影时,必然会引入一些扭曲。根据具体的投影方法,这种扭曲可能影响到面积、形状、距离或方向(也有属性不发生改变,故有等角、等积、任意投影)。
在 GIS 中,经常需要在这两种坐标系统之间进行转换,当我们将地理空间数据从一个坐标系转换到另一个坐标系时,我们通常说是在执行"坐标转换"或"坐标投影"。

四、例子说明上述坐标转换关系

1,将屏幕坐标(Cartesian2)转换为笛卡尔空间直角坐标(Cartesian3)
2,笛卡尔空间直角坐标转地理坐标(弧度)
3,地理坐标(弧度)转经纬度坐标

// viewer:Cesium的Viewer对象
let handler3D = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    // handler3D.setInputAction 方法定义了一个回调函数,该函数会在鼠标移动时被调用。它提供了鼠标的位置信息。
    handler3D.setInputAction(function(movement) {
      // 屏幕坐标
      let pick = movement.endPosition
      if (pick) {
        // 1,将屏幕坐标(Cartesian2)转换为笛卡尔空间直角坐标(Cartesian3)
        let cartesian = viewer.scene.globe.pick(
          viewer.camera.getPickRay(pick),
          viewer.scene
        );
        if (cartesian) {
          //2,笛卡尔空间直角坐标转地理坐标(弧度)
          // (1),使用椭球体转换(基于WGS84椭球体)
          let cartographic =  Cesium.Ellipsoid.WGS84.cartesianToCartographic(
            cartesian
          );
          // // (2),使用椭球体转换(基于默认椭球体,默认为WGS84椭球体)
          // let cartographic2 = viewer.scene.globe.ellipsoid.cartesianToCartographic(
          //   cartesian
          // );
          // // (3),直接转换(基于WGS84椭球体)
          // let cartographic3=Cesium.Cartographic.fromCartesian(cartesian);
          if (cartographic) {
            // 海拔
            let height = viewer.scene.globe.getHeight(cartographic);
            // 3,地理坐标(弧度)转经纬度坐标
            let point = [
              Cesium.Math.toDegrees(cartographic.longitude),
              Cesium.Math.toDegrees(cartographic.latitude)
              // (cartographic.longitude / Math.PI) * 180,
              // (cartographic.latitude / Math.PI) * 180
            ];
            if (!height) {
              height = 0;
            }
            if (!point) {
              point = [0, 0];
            }
            let content =
              "  海拔:" +
              height.toFixed(2) +
              "米" +
              "  经度:" +
              point[0].toFixed(6) +
              " 纬度:" +
              point[1].toFixed(6);
            console.log( content)
          }
        }
      }
    }, Cesium.ScreenSpaceEventType.MOUSE_MOVE);

cesium学习记录04-坐标系,cesium学习,学习

五、中国常用坐标系及EPSG代码:

(1)CGCS2000 地理坐标系:

EPSG:4490

(2)CGCS2000 3度带 Gauss-Kruger 投影:

东经 75° - EPSG:4501
东经 78° - EPSG:4502
…(依此类推,每隔3°一个投影带,直到东经 132° - EPSG:4543)

(3)CGCS2000 6度带 Gauss-Kruger 投影:

东经 75° - EPSG:4544
东经 81° - EPSG:4545
…(依此类推,每隔6°一个投影带)

(4)北京1954 地理坐标系:

EPSG:4214

(5)北京1954 3度带 Gauss-Kruger 投影:

东经 75° - EPSG:2421
东经 78° - EPSG:2422
…(依此类推,每隔3°一个投影带)

(6)WGS 84 地理坐标系:

EPSG:4326
这个是一个全球通用的坐标系,通常被 GPS 和许多国际数据集所采用。

(7)WGS 84 / Pseudo-Mercator:

EPSG:3857
这个是 Web Mercator 投影,主要被 Web 地图(如 Google Maps, Bing Maps)使用。

(8)Xian 1980 地理坐标系:

EPSG:4610
用于某些特定区域的数据。

其它坐标系代码查询

六、坐标转换

这里使用epsg网站在线转换举例说明
cesium学习记录04-坐标系,cesium学习,学习
坐标由WGS 84 地理坐标系转换为WGS 84 / 伪墨卡托投影坐标系文章来源地址https://www.toymoban.com/news/detail-641944.html

七、cesium中的坐标系知识及坐标转换

1,坐标系

1.1,屏幕坐标系
  屏幕坐标系即二维笛卡尔坐标系,Cesium中使用Cartesian2来描述,原点在屏幕左上角,x轴向右,y轴向下,单位为像素。

1.2,笛卡尔空间直角坐标系
  笛卡尔空间直角坐标系即三维笛卡尔坐标系,Cesium中使用Cartesian3来描述,原点在地球中心,x轴向东,y轴向北,z轴向上,单位为米。

1.3,WGS84地理坐标系
  WGS84地理坐标系即经纬度坐标系,在表示经纬度时有度数制和弧度制两种,Cesium中使用Cartographic来描述弧度制的WGS84坐标系,原点在地球中心,x轴向东,y轴向北,z轴向上。

1.4,WebGL坐标系
 WebGL坐标系即WebGL空间直角坐标系,Cesium中使用Cartesian4来描述,原点在地球中心,x轴向东,y轴向北,z轴向上,w轴向外,单位为米。

2,坐标转换

2.1,角度与弧度互转
  角度转弧度:let radians=Cesium.Math.toRadians(degrees)
  弧度转角度:let degrees=Cesium.Math.toDegrees(radians)

2.2,WGS84(经纬度)与笛卡尔坐标(Cartesian3)互转
  WGS84转Cartesian3:
  (1)  直接通过经纬度转换
  (1).1 let cartesian3=Cesium.Cartesian3.fromDegrees(longitude,latitude,height); 格式:[113.21, 25.61, 100.0],高度默认为0,可以不写
  (1).2 let cartesian3s = Cesium.Cartesian3.fromDegreesArray(coordinates); 格式:[113.21, 25.61, 113.54, 25.24],不带高度格式的数组
  (1).3 let cartesian3s = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates); 格式:[113.21, 25.61, 100.0, 113.54, 25.24, 200.0],带高度格式的数组
  弧度制也类似,使用Cesium.Cartesian3.fromRadians, Cesium.Cartesian3.fromRadiansArray, Cesium.Cartesian3.fromRadiansArrayHeights
  (2)  使用椭球体转换
  let position=Cesium.Cartographic.fromDegrees(longitude,latitude,height);
  (2).1 let cartesian3=Cesium.Ellipsoid.WGS84.cartographicToCartesian(position); 单个坐标
  (2).2 let cartesian3s=Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions); 坐标数组
  Cartesian3转WGS84
  (1)  直接转换
  let cartographic=Cesium.Cartographic.fromCartesian(cartesian3);  直接转换得到的是WGS84弧度制的经纬度坐标,可将其再转换为角度制
  (2)  使用椭球体转换
  (2).1 let cartographic=Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);  单个坐标
  (2).2 let cartographics=Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(cartesian3s);  坐标数组
  
  2.3 屏幕坐标与笛卡尔坐标互转
  屏幕坐标转笛卡尔坐标(Cartesian2转Cartesian3)
  (1) 屏幕坐标转椭球面笛卡尔坐标,不包含地形、模型等的坐标
  let cartesian3=viewer.scene.camera.pickEllipsoid(cartesian2);
  (2) 屏幕坐标转场景坐标,包含地形和模型等的场景坐标
  let cartesian3=viewer.scene.pickPosition(cartesian2);
  (3) 屏幕坐标转地表笛卡尔空间坐标,通过相机与屏幕点位连线来求取坐标
  let ray=viewer.camera.getPickRay(cartesian2);
  let cartesian3=globe.pick(ray,viewer.scene);
  笛卡尔坐标转屏幕坐标(Cartesian3转Cartesian2)
  let cartesian2=Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene,cartesian3);

到了这里,关于cesium学习记录04-坐标系的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【学习笔记】空间坐标系旋转与四元数

      最近在学惯性器件,想着先把理论知识脉络打通,于是便开始学习空间坐标系旋转和四元数,正好结合刚刚结课的课程《机器人控制技术》,记录一下学习心得。 旋转矩阵和齐次变换矩阵部分主要参考自教材 《机器人学导论》 中的第2章 【有需要的可以去z-library上免费

    2024年02月01日
    浏览(42)
  • 【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

      这个问题来自于我想要使用colmap的稀疏重建结果,然后发现由于相机坐标系的定义没弄清楚,导致我获取的结果存在问题。    1 问题引出   下面先从我们还不知道坐标系定义的视角开始理解,引出问题所在。使用的是一份无人机影像数据,共有59张影像:   下图

    2024年02月06日
    浏览(176)
  • 【UnityShader入门精要学习笔记】第四章(1)坐标系

    本系列为作者学习UnityShader入门精要而作的笔记,内容将包括: 书本中句子照抄 + 个人批注 项目源码 一堆新手会犯的错误 潜在的太监断更,有始无终 总之适用于同样开始学习Shader的同学们进行有取舍的参考。 (该系列笔记中大多数都会复习前文的知识,特别是前文知识非

    2024年01月20日
    浏览(42)
  • Android OpenGL ES 学习(九) – 坐标系统和实现3D效果

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投影 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EBO/IBO 优化程序 Android OpenG

    2024年01月25日
    浏览(45)
  • 世界坐标系、相机坐标系、图像坐标系、像素坐标系

    四个坐标系都是什么? 1.世界坐标系-相机坐标系-图像坐标系-像素坐标系 2.像素坐标系-图像坐标系-相机坐标系-世界坐标系 图像处理、立体视觉等等方向常常涉及到四个坐标系:世界坐标系、相机坐标系、图像坐标系、像素坐标系                     构建世界坐标系只是

    2024年01月21日
    浏览(69)
  • 坐标转换(相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系)

    一般情况下我们所涉及到的坐标包括四个,即相机坐标系、世界坐标系、图像物理坐标系、图像像素坐标系。我们本文的讲解思路是在讲解每个坐标转换之前先讲清楚每个坐标系所表示的含义。本文主要参考由高翔主编的视觉SLAM十四讲第五章相机模型。 相机将三维世界的坐

    2024年02月09日
    浏览(73)
  • 关于世界坐标系,相机坐标系,图像坐标系,像素坐标系的一些理解

    在项目中,研究标定时,像素坐标与轴位置的关系时,需要用到关于坐标系的转换。在此也就是找到世界坐标系与像素坐标系的转换关系。想理清楚故做如下记录。 四坐标关系图如下: 图中: 世界坐标系(O W —X W Y W Z W ): 一个三维直角坐标系,以其为基准可以描述相机

    2024年02月09日
    浏览(72)
  • 对于SLAM定位中各类坐标系的理解(坐标系,里程计坐标系,基座坐标系与雷达坐标系)

    最近系统性学习了一遍LIO-SAM,开始的时候一直搞不懂里程计坐标系,经过不断学习才有了一点自己的拙见。 引言 :首先我们搞清楚SLAM算法主要是解决建图与定位问题,其更 侧重定位 ,即让机器人知道自己在全局地图的哪个位置,只有这样才能继续后续的预测、感知、控制

    2024年02月03日
    浏览(49)
  • 世界坐标系、相机坐标系和图像坐标系的转换

    之前只是停留在会用的阶段,一直没去读懂计算的原理,今天通读了大佬的文章,写的言简意赅,感谢感谢~~特此记录一下,仅用作个人笔记 贴链接,十分感谢~ https://blog.csdn.net/weixin_44278406/article/details/112986651 https://blog.csdn.net/guyuealian/article/details/104184551 将三维物体转换成照

    2023年04月15日
    浏览(64)
  • 机器人坐标系转换从局部坐标系转换到世界坐标系

    矩阵方式: 下面是代码: 函数方式: 根据三角函数的特性,可以进行一下简化: 下面是简化前的代码示例:

    2024年04月16日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包