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),经纬度直接转换为世界坐标

后面再更新

 
 
 
 
 

Cesium中各种坐标以及相互转换(七)的更多相关文章

  1. cesium学习——cesium中的坐标

    一.坐标展现形式 在cesium中,对于坐标数值单位有三种:角度.弧度和坐标值 1.角度 角度就是我们所熟悉的经纬度,对于地球的坐标建立如下: 图中以本初子午线作为x和z的面,建立了一个空间坐标系.可 ...

  2. Cesium中的地形和坐标转换说明

    1 Cesium中的地形 Cesium中的地形系统是一种由流式瓦片数据生成地形mesh的技术,厉害指出在于其可以自动模拟出地面.海洋的三维效果.创建地形图层的方式如下: var terrainProv ...

  3. Cesium之球心坐标与本地坐标

    1球心坐标(ECEF)与本地坐标(NEU) 假如你来到一个陌生城市,你很可能需要问路.通常会告诉你向北走100米,右转,向东走100米,理解起来很直观.你给儿子买了一个地球仪,你从北京(39,115) ...

  4. 关于Cesium中的常用坐标系及说明

    Cesium是一个基于JavaScript的开源框架,可用于在浏览器中绘制3D的地球,并在其上绘制地图(支持多种格式的瓦片服务),该框架不需要任何插件支持,但是浏览器必须支持WebGL. Cesium ...

  5. 在ArcGIS Desktop中进行三参数或七参数精确投影转换

    转自 在ArcGIS Desktop中进行三参数或七参数精确投影转换     ArcGIS中定义的投影转换方法,在对数据的空间信息要求较高的工程中往往不能适用,有比较明显的偏差.在项目的前期数据准备工 ...

  6. Cesium中的坐标系及转换

    在我们开始学习Entity之前,我们首先需要先学习下Cesium中的坐标系,Cesium中有多个坐标系,在进行添加Entity时经常会使用到. 一.坐标系介绍 我们先来列举下Cesium中的坐标系:W ...

  7. 使用cesium中的scene.open中遇到的几个问题

    有些服务是发在场景(scene)下的,超图提供了一个很方便的方法:scene.open,这个方法会将场景中所有的图层(无论是OSGB还是影像和地形)加载进来.同时这个方法会自带一个自动地位功能,具体实 ...

  8. ionic中获取坐标方法

    ionic中获取坐标的方法 1.首相需要执行命令: cordova plugin add cordova-plugin-geolocation2.然后块级注入配置bower文件引入ngCordova ...

  9. c#中 uint--byte[]--char[]--string相互转换汇总

    原文:c#中 uint--byte[]--char[]--string相互转换汇总 在在做一些互操作的时候往往需要一些类型的相互转换,比如用c#访问win32api的时候往往需要向api中传入DWOR ...

  10. javascript中常用坐标属性offset、scroll、client

    原文:javascript中常用坐标属性offset.scroll.client 今天在学习js的时候觉得这个问题比较容易搞混,所以自己画了一个简单的图,并且用js控制台里面输出测试了下,便于理解. ...

随机推荐

  1. <七>深入理解new和delete的原理

    new ,delete 运算符 int *p =new int; delete p; 看一下汇编代码 可以看到new 和delete 运算符其实也是 operator运算符重载函数的调用 malloc ...

  2. 痞子衡嵌入式:MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是MCUXpresso IDE下高度灵活的FreeMarker链接文件模板机制. 痞子衡之前写过一篇文章 <MCUXpresso I ...

  3. SUPERVISOR监控tomcat配置文件

    Supervisor安装教程参考:https://www.cnblogs.com/brad93/p/16639953.html tomcat安装教程参考:https://www.cnblogs.com ...

  4. 【Shell脚本案例】案例5:找出CPU/内存率占用高的进程

    一.背景 找出占用高的进程 使用脚本编写找出占用CPU的进程 二.分析 1.查看进程 top 输入后按C,就可以列出 其他: ps aux 2.思路 awk进行排序,如top10 即ps aux |a ...

  5. python中的数学函数

  6. PyTorch复现GoogleNet学习笔记

    PyTorch复现GoogleNet学习笔记 一篇简单的学习笔记,实现五类花分类,这里只介绍复现的一些细节 如果想了解更多有关网络的细节,请去看论文<Going Deeper with Conv ...

  7. vue 引入vant 上传图片oss处理

    <van-uploader :before-read="beforeRead" v-model="product.images" max-size=&qu ...

  8. 谈谈我的「数字文具盒」 - Obsidian

    这篇关于 Obsidian 是生产力工具的终篇了,因为目前涉及 Obsidian 的文章特别多,所以我就不啰里啰嗦叙述重复的文字了.本文主要涉及到 Obsidian 和 Docusaurus 如何进行 ...

  9. 火山引擎DataLeap数据调度实例的 DAG 优化方案

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 实例 DAG 介绍 DataLeap 是火山引擎自研的一站式大数据中台解决方案,集数据集成.开发.运维.治理.资产管理能力 ...

  10. 内网渗透-at&schtasks&impacket的使用

    内网机器结构 机器账号密码如下: 2008 r2 webserver 域内 web 服务器 本地管理员账号密码 : .\administraotr:admin!@#45 当前机器域用户密码 : god ...