cesium学习记录04-坐标系

news2024/12/28 19:49:52

一、地理坐标系和投影坐标系的关系

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

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

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

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

它们之间的关系:

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

二、中国常用坐标系及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网站在线转换举例说明
在这里插入图片描述
坐标由WGS 84 地理坐标系转换为WGS 84 / 伪墨卡托投影坐标系

四、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);

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

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

相关文章

2023河南萌新联赛第(五)场:郑州轻工业大学 --亚托莉 -我挚爱的时光-

题目描述 亚托莉,-我挚爱的时光- 亚托莉自身机器可能有出了一点小故障,希望你能帮助她解决这个问题~ 亚托莉内部的操作系统的是 Linux 操作系统,不同于 Windows 操作系统。在大多数情况下, Linux 操作系统一般是通过…

死磕Android性能优化,卡顿原因与优化方案

随着移动互联网的快速发展,Android应用的性能优化变得尤为重要。卡顿是用户体验中最常见的问题之一,它会导致应用的响应变慢、界面不流畅,甚至影响用户的使用体验。因此,我们需要深入了解卡顿问题的原因,并寻找相应的解…

(Python)Requests+Pytest+Allure接口自动化测试框架从0到1搭建

前言:本文主要介绍在企业使用Python搭建接口自动化测试框架,数据驱动读取excel表里的数据,和数据库方面的交互,包括关系型数据库Mysql和非关系型数据库MongDB,连接数据库,读取数据库中数据,最后…

刷题DAY18

题目一 LRU算法的实现 做一个key-value结构 假如说这个LRU的大小为3 那么就是当KEY-value没满的时候 直接顺序加入 当满了的时候 把最长时间没有使用的key-value替换掉 要求实现一个put 和 get行为 时间复杂度均为O(1) 用双向链表哈希表实现 哈希表可以用系统封装的双向链表…

node笔记——调用免费qq的smtp发送html格式邮箱

文章目录 ⭐前言⭐smtp授权码获取⭐nodemailer⭐postman验证接口⭐结束 ⭐前言 大家好,我是yma16,本文分享关于node调用免费qq的smtp发送邮箱。 node系列往期文章 node_windows环境变量配置 node_npm发布包 linux_配置node node_nvm安装配置 node笔记_h…

嵌入式开发的学习与未来展望:借助STM32 HAL库开创创新之路

引言: 嵌入式开发作为计算机科学领域的重要分支,为我们的日常生活和产业发展提供了无限的可能。STMicroelectronics的STM32系列芯片以其出色的性能和广泛的应用领域而备受关注。而STM32 HAL库作为嵌入式开发的高级库,为学习者提供了更高效、更…

Jmeter(六) - 从入门到精通 - 建立数据库测试计划(详解教程)

1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,因此这篇文章主要介绍了jmeter连接和创建数据库测试计划的过程,在文中通过示例和代码非常详细地介绍给大家,希望对各位小伙…

浅谈JVM中的即时编译器(Just-In-Time compiler, JIT)

Java虚拟机(JVM)中的即时编译器(Just-In-Time compiler, JIT)是一个非常重要的组件,它负责将字节码转换为本地机器代码。在不使用JIT的情况下,JVM通过解释字节码来执行程序,这意味着它会为每个字…

24届近5年上海理工大学自动化考研院校分析

今天学姐给大家带来的是上海理工大学控制考研分析 满满干货~还不快快点赞收藏 一、上海理工大学 学校简介 上海理工大学(University of Shanghai for Science and Technology)是一所以工学为主,工学、理学、经济学、管理学、文…

如何实现Excel中多级数据联动

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在类Excel表格应用中,常用的需求场景是根据单元格之间的数据联动&…

Leetcode-每日一题【剑指 Offer 13. 机器人的运动范围】

题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例…

css3背景渐变

1.线性渐变 <style>.box {width: 200px;height: 200px;border: 1px solid black;float: left;margin-left: 50px;}.box1 {background-image: linear-gradient(green, yellow, red);}/* 右上 */.box2 {background-image: linear-gradient(to right top, green, yellow, re…

Fortinet安全专家问答实录|如何防护暴力破解、撞库攻击

黑客攻防&#xff0c;一个看似神秘&#xff0c;但却必不可缺的领域。近期&#xff0c;全球网络与安全融合领域领导者Fortinet&#xff08;Nasdaq&#xff1a;FTNT&#xff09;&#xff0c;开启了Fortinet DEMO DAY系列实战攻防演练线上直播&#xff0c;让人人都能零距离观摩黑客…

spring cloud智慧工地源码(项目端+监管端+数据大屏+APP)

spring cloud智慧工地源码&#xff08;项目端监管端数据大屏APP&#xff09; 系统功能介绍 【智慧工地PC项目端功能总览】 一.项目人员管理 包括&#xff1a;信息管理、信息采集、证件管理、考勤管理、考勤明细、工资管理、现场统计、WIFI教育、工种管理、分包商管理、班组管…

5W2H分析法模版

&#xff08;1&#xff09;WHAT——是什么&#xff0c;目的是什么&#xff0c;做什么工作。 条件是什么&#xff0c;哪一部分工作要做&#xff0c;目的是什么&#xff0c;重点是什么&#xff0c;与什么有关系&#xff0c;功能是什么&#xff0c;规范是什么&#xff0c;工作对象…

【LeetCode】打家劫舍||

打家劫舍|| 题目描述算法分析编程代码 链接: 打家劫舍|| 在做这个题之前&#xff0c;建议大家做一下这个链接: 按摩师 我的博客里也有这个题的讲解&#xff0c;名字是按摩师 题目描述 算法分析 编程代码 class Solution { public:int maxrob(vector<int>nums,int left,…

View绘制流程-Window创建

前言&#xff1a; View绘制流程中&#xff0c;主要流程是这样的&#xff1a; 1.用户进入页面&#xff0c;首先创建和绑定Window&#xff1b; 2.首次创建以及后续vsync信号来临时&#xff0c;会请求执行刷新流程&#xff1b; 3.刷新流程完成后&#xff0c;会通知SurfaceFlin…

React源码解析18(1)------ React.createElement 和 jsx

1.React.createElement 我们知道在React17版本之前&#xff0c;我们在项目中是一定需要引入react的。 import React from “react” 即便我们有时候没有使用到React&#xff0c;也需要引入。原因是什么呢&#xff1f; 在React项目中&#xff0c;如果我们使用了模板语法JSX&am…

计算机网络实验1:网络命令学习

文章目录 1. 主要教学内容2. ping命令2.1 发送ping测试报文2.2 检测TCP/IP 3. tracert命令4. ipconfig命令5. netstat命令6. arp命令7. net命令8. netsh命令 1. 主要教学内容 实验内容&#xff1a;学习ping、tracert、ipconfig等常用的网络命令。所需学时&#xff1a;1。重难点…

数据结构-栈(C语言简单实现)

简介 栈是一种数据结构栈可以用来存放数字一次只能向栈里加入一个数字&#xff0c;一次也只能从栈里获得一个数字栈里到的数字有前后顺序&#xff0c;先进入到的数字在前&#xff0c;后进入的数字在后每次从栈里获取的数字一定是最后面的数字&#xff0c;最后获取的数字一定是…