Cesium坐标系

news2024/9/19 9:46:58

针对作坐标系这边参考网上以及自己的一些理解大家可以参考学习一下。

文章目录

      • **一、GIS 坐标系**
      • **二、经纬度坐标(球面坐标)**
      • **三、地理坐标(弧度)**
      • **四、屏幕坐标系**
      • **五、空间直角坐标系**
      • **六、Cesium 中的坐标系**
      • **七、坐标系转换**

一、GIS 坐标系

要想在 Cesium 开发中得心应手,就得熟悉 Cesium 中常用的坐标类型,以及它们之间是如何进行转换的。等真正要用的时候,还可以再回来仔细研究,加深理解。

二、经纬度坐标(球面坐标)

经纬度坐标通常被叫做地理坐标或者地球坐标哦。它是一种基于地球表面的坐标系统,专门用来确定地球上任何一个点的位置呢。这个坐标系统主要用两个数值来表示位置,那就是经度和纬度。

  1. 经度(Longitude):它表示的是从本初子午线(一般是通过英国伦敦的格林尼治天文台那条线)向东或者向西的角度距离。经度的范围是从 -180° 到 +180°,其中 0° 就代表本初子午线。
  2. 纬度(Latitude):表示从赤道向北或者向南的角度距离。纬度的范围是从 -90°(南极点)到 +90°(北极点),而 0° 呢,就表示赤道。

经纬度坐标也常常被称作:

  • 球面坐标(Spherical Coordinates):因为地球近似是一个球体嘛,所以经纬度坐标就可以看作是在球面上确定点的位置。
  • 大地坐标(Geodetic Coordinates):在大地测量学当中,这种坐标系统是用来描述地球表面上的点的。
  • WGS84 坐标:WGS84(World Geodetic System 1984)是一种被广泛使用的全球地理坐标系统哦。它提供了一个标准化的参考框架,专门用于地理定位呢。

经纬度坐标的应用可广泛啦,在地图制作、导航、地理信息系统(GIS)、航空和海洋导航等领域都能看到它的身影。在数字地图服务和应用程序当中,经纬度坐标更是最常见的位置表示方式之一呢。

三、地理坐标(弧度)

在地理信息系统(GIS)里呀,地理坐标通常指的是地球上某个点的位置,用经纬度来表示。不过呢,因为地球是一个近似的椭球体,要是用弧度而不是角度来表示经纬度坐标的话,就可以避免在计算当中引入一些复杂的情况,特别是在进行距离和面积的测量的时候。

弧度是一种角度的度量单位哦,它是基于圆的周长和半径之间的关系来定义的。一个完整的圆周被定义为 2π 弧度。弧度和角度的转换关系是这样的:比如角度转弧度,就是用角度值乘以 π/180;弧度转角度呢,就是用弧度值乘以 180/π。

在 GIS 中,使用弧度的地理坐标可以简化一些数学运算哦,尤其是涉及到三角函数和地球曲率的计算。比如说,在计算两点之间的大圆距离(也就是地球表面的最短路径)的时候,用弧度就可以更直接地应用球面三角学公式呢。

地理坐标(弧度)的应用

  1. 距离计算:使用球面三角学公式,可以更准确地算出两点之间的距离哦。
  2. 方向计算:要确定从一个点到另一个点的方向,用弧度可以简化计算过程呢。
  3. 地图投影:在某些地图投影中,使用弧度可以更自然地处理地球表面的曲率问题。

四、屏幕坐标系

屏幕坐标系是一种二维坐标系统,专门用来描述屏幕上的点或者区域的位置。在屏幕坐标系当中,通常是以屏幕的左上角为原点,水平向右是 x 轴正方向,垂直向下是 y 轴正方向。在 Cesium 中,屏幕坐标系也被叫做二维笛卡尔平面坐标哦。

可以这样来创建屏幕坐标系中的一个点:new Cesium.Cartesian2(x, y)

屏幕坐标系有这些特点呢:

  1. 原点位置:屏幕坐标系的原点(0,0)就在屏幕的左上角。
  2. 正方向:x 轴正方向是向右的,y 轴正方向是向下的。
  3. 单位:通常使用像素(px)作为单位。
  4. 范围:坐标值的范围取决于屏幕或者窗口的大小。

五、空间直角坐标系

在地理信息系统(GIS)中,空间直角坐标系是一种三维坐标系统哦,它可以在三维空间中非常精确地表示点、线、面的位置。这种坐标系一般是由三个正交的坐标轴组成,也就是 X、Y 和 Z 轴。

空间直角坐标系有这些特点:

  1. 正交性:X、Y 和 Z 轴是相互垂直的,形成了一个直角坐标系。
  2. 三维性:可以表示三维空间中的任何位置呢,包括高度或者深度信息。
  3. 标准化:通常是以地球的质心或者某个参考点为原点,建立起一个标准化的坐标系统。
  4. 应用广泛:在地理测量、城市规划、建筑设计、3D 建模等领域都有广泛的应用。

六、Cesium 中的坐标系

Cesium 中支持两种坐标系呢,分别是 3D 笛卡尔坐标系和经纬度坐标系。

  1. 3D 笛卡尔坐标系
    • 先来了解一下笛卡尔空间直角坐标系哈。它的 X、Y、Z 三个轴的正方向如下图所示。坐标系的原点是在地球的中心哦。所以呀,这些坐标通常是负的。单位一般是米。可以这样来创建一个 3D 笛卡尔坐标系中的点:Cesium.Cartesian3(x, y, z)
  2. 地理坐标系
    • 这是一种基于经度和纬度的坐标系,用度数来表示位置。在 Cesium 中,可以通过将经度、纬度和高度值传递给 Cartographic 对象来表示地理坐标哦。其中经度和纬度是以度数表示的,高度值可以是以米或其他单位表示的。Cesium 会把地理坐标转换为笛卡尔坐标,这样就能在地球表面上进行可视化啦。

七、坐标系转换

Cesium 提供了很多可以进行坐标系互相转换的大类呢。

  1. 经纬度转空间直角
    const cartesian3 = Cesium.Cartesian3.fromDegrees(lng, lat, height);

这段代码的意思就是,把经度(lng)、纬度(lat)和高度(height)表示的经纬度坐标转换为空间直角坐标系中的一个点。

  1. 经纬度转地理坐标(弧度)
    const radians = Cesium.Math.toRadians(degrees);

这里呢,是把用角度表示的度数(degrees)转换为弧度(radians),也就是把经纬度从角度表示转换为弧度表示。

  1. 地理坐标(弧度)转经纬度
    const degrees = Cesium.Math.toDegrees(radians);

和上面相反,把弧度(radians)表示的地理坐标转换为用角度表示的经纬度度数(degrees)。

  1. 空间直角转经纬度
    // 先将 3D 笛卡尔坐标转为地理坐标(弧度)
    const cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
    // 再将地理坐标(弧度)转为经纬度
    const lat = Cesium.Math.toDegrees(cartographic.latitude);
    const lng = Cesium.Math.toDegrees(cartographic.longitude);
    const height = cartographic.height;

首先把空间直角坐标系中的点(cartesian3)转换为地理坐标(弧度)表示的 Cartographic 对象,然后再把这个对象中的纬度和经度从弧度转换为角度,就得到了经纬度坐标,同时还能得到高度值。

  1. 屏幕坐标转经纬度
    // 监听点击事件,拾取坐标
    const handler = new Cesium.ScreenSpaceEventHandler(viewer.scene.canvas);
    handler.setInputAction((e) => {
        const clickPosition = viewer.scene.camera.pickEllipsoid(e.position);
        const radiansPos = Cesium.Cartographic.fromCartesian(clickPosition);
        console.log(
            "经度:" +
            Cesium.Math.toDegrees(radiansPos.longitude) +
            ", 纬度:" +
            Cesium.Math.toDegrees(radiansPos.latitude)
        );
    }, Cesium.ScreenSpaceEventType.LEFT_CLICK);

这里是通过监听屏幕的点击事件,当用户在屏幕上点击时,获取点击位置对应的地球上的点(clickPosition),然后把这个点从笛卡尔坐标转换为地理坐标(弧度)表示的对象,最后再把这个对象中的经度和纬度从弧度转换为角度,就得到了点击位置对应的经纬度坐标。

  1. 屏幕坐标转空间直角坐标
    var cartesian3 = viewer.scene.globe.pick(viewer.camera.getPickRay(windowPostion), viewer.scene);

根据屏幕坐标(windowPostion),通过相机的射线拾取方法,获取对应的空间直角坐标系中的点。

  1. 世界坐标转屏幕坐标
    windowPostion = Cesium.SceneTransforms.wgs84ToWindowCoordinates(viewer.scene, cartesian3);

把世界坐标(一般是经纬度坐标转换后的空间直角坐标)表示的点(cartesian3)转换为屏幕坐标(windowPostion)。

GISer世界
面试题
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2113512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++模版初阶】——我与C++的不解之缘(七)

一、泛型编程 在之前,我们想要实现一个交换两个值的函数,我们要实现好多个(int类型、double类型、char类型以及自定义类型)对于每一个类型,我们都需要实现一个交换函数: int Swap(int& x, int& y)…

【Qt】仿照qq界面的设计

widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug>//QT中信息调试类&#xff0c;用于输出数据&#xff0c;无需使用该类的实例化对象&#xff0c;直接使用成员函数即可 #include <QIcon>//图标类 #include <QPushButton&…

【笔记】数据结构刷题09

快速排序 215. 数组中的第K个最大元素 class Solution { public:int findKthLargest(vector<int>& nums, int k) {return divide(nums,0,nums.size()-1,nums.size()-k);}int divide(vector<int>& nums,int left,int right,int k){if(leftright)return nums…

Linux 如何将pwd的结果同步复制到剪贴板

pwd是我们经常使用的一个命令&#xff0c;它的作用是显示当前所在路径。 不过&#xff0c;很多时候我们使用pwd命令不仅仅是查看当前路径&#xff0c;而是复制路径。 通常情况下&#xff0c;使用pwd命令进行复制路径的操作如下&#xff1a; 使用pwd显示路径&#xff08;键盘…

计算机毕业设计选题推荐-健康健身追踪系统-运动健身系统-Java/Python项目实战

✨作者主页&#xff1a;IT毕设梦工厂✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

00Mac安装playwright

文章目录 前言一、执行以下命令安装二、安装如果报错zsh: command not found: pip三、安装浏览器驱动 前言 现在常用的三个自动化测试&#xff08;或者爬虫&#xff09;库&#xff0c;是Selenium、Puppeteer、Playwright。Playwright是未来趋势&#xff0c;主要学习Playwright…

资料分析笔记(花生)

preparation 资料分析首先最重要的是时间/时间段分小互换 一、速算技巧 加法技巧 1.尾数法 在多个数字精确求和或求差时&#xff0c;从“尾数”入手&#xff0c;为保证精确与速度&#xff0c;一般可观察两位。 求和题目中&#xff0c;若四个选项中后两位都不同&#xff0c;…

小琳Python课堂:深入理解Python对象:状态、创建与管理

大家好&#xff0c;这里是小琳Python课堂。今天我们继续深入理解Python对象的状态、创建与管理。让我们一起来探索这些概念&#xff0c;以帮助你更好地掌握Python编程。 一、Python对象的状态 1. 实例属性与类属性 Python对象的属性分为实例属性和类属性。实例属性是对象独有…

TRIZ在充电桩安全中的应用探究

在当今电动汽车日益普及的时代&#xff0c;充电桩的安全问题至关重要。TRIZ&#xff08;发明问题解决理论&#xff09;可以为提升充电桩的安全性提供强大助力。具体步骤如深圳天行健企业管理咨询公司下文所述&#xff1a; 一、充电桩安全面临的问题 1.电气安全风险&#xff1a…

Ansys Zemax 高级实战(HUD)开启光学新征程

亲爱的光学设计爱好者们&#xff1a; 你是否渴望在车载 HUD 设计领域大展身手&#xff1f;是否想深入了解 Ansys Zemax 的强大功能和应用技巧&#xff1f;现在&#xff0c;机会来了&#xff01; 我们将于 2024年10月24日至25日 举办为期两天的 Ansys Zemax 高级实战&#xff…

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络&#xff08;GAN, Generative Adversarial Network&#xff09;是一种深度学习模型&#xff0c;由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据&#xff0c;通过两个神经网络相互对抗&#xff0c;来生成以假乱真的新数据。以下是对GAN的详细阐述&#xff…

【原创】java+swing+mysql简易员工管理系统设计与实现

个人主页&#xff1a;程序员杨工 个人简介&#xff1a;从事软件开发多年&#xff0c;前后端均有涉猎&#xff0c;具有丰富的开发经验 博客内容&#xff1a;全栈开发&#xff0c;分享Java、Python、Php、小程序、前后端、数据库经验和实战 文末有本人名片&#xff0c;希望和大家…

web登录校验

基础登录功能 LoginController PostMapping("/login")Result login(RequestBody Emp emp) {log.info("前端&#xff0c;发送了一个登录请求");Emp e empService.login(emp);return e!null?Result.success():Result.error("用户" "名或密…

isxdigit函数讲解 <ctype.h>头文件函数

目录 1.头文件 2.isxdigit函数使用 方源一把抓住VS2022&#xff0c;顷刻 炼化&#xff01; ​​​​​​​ 1.头文件 以上函数都需要包括头文件<ctype.h> &#xff0c;其中包括 isxdigit 函数 #include<ctype.h> 2.isxdigit函数使用 isxdigit 函数是判断字符…

Leetcode Hot 100刷题记录 -Day10(合并区间)

合并区间 问题描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti,endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&…

vscode从本地安装插件

1. 打开VSCode。 2. 点击左侧菜单中的“扩展”&#xff08;或按CtrlShiftX&#xff09;。 3. 点击“更多操作”&#xff08;三个点&#xff09;> “从VSIX安装”。 4. 选择下载的.vsix文件。 5. 点击“安装”即可安装插件。

IstoreOS安装的1Panel无法安装应用

IstoreOS安装的1Panel无法安装应用&#xff0c;无法安装OpenResty&#xff0c;创建Docker提示文件不存在 这个路径&#xff1a; /root/Configs/1Panel/1panel/apps/openresty/openresty/www /root/Configs/1Panel/1panel/apps/openresty/openresty/1pwaf/data /root/Configs/…

请求响应-02.请求-postman工具

一.前后端分离开发 当前主流的开发模式是前后端分离开发&#xff0c;每开发一个功能&#xff0c;就需要对该功能接口进行测试&#xff0c;当前我们的测试方法是直接将url地址输入到浏览器中&#xff0c;查看web页面是否满足我们的要求。但是浏览器发起的请求全部都是GET请求&am…

【笔记】408刷题笔记

文章目录 三对角三叉树求最小带权路径UDP报文首部和TCP报文首部IP报文首部TCP报文首部UDP报文首部 刷新和再生的区别地址译码 为了区分队空队满&#xff0c;可以使用三种处理方式 1&#xff09;牺牲一个单元 队头指针在队尾指针的下一位置作为队满的标志 队满条件&#xff1a;(…

每日一题,力扣leetcode Hot100之238.除自身以外数组的乘积

乍一看这个题很简单&#xff0c;但是不能用除法&#xff0c;并且在O(N)时间复杂度完成或许有点难度。 考虑到不能用除法&#xff0c;如果我们要计算输出结果位置i的值&#xff0c;我们就要获取这个位置左边的乘积和右边的乘积&#xff0c;那么我新设立两个数组L和R。 对于L来…