cesium中的坐标系统与转换

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

1.cesium坐标介绍

cesium开发中常用的坐标系统

  • 屏幕坐标系统(二维)
  • 笛卡尔空间直角坐标系统(WGS84)
  • 地理坐标系统(经纬度坐标)

Cesium目前支持两种坐标系WGS84地理WKID=4326和WebMercator:WKID=3857,但是在Cesium中没有实际的对象来描述WGS84坐标,都是以弧度的方式来进行运用的也就是Cartographic类:

[1]屏幕坐标系统

也就是二维笛卡尔坐标系cesium中使用Cartesian2来描述屏幕坐标系统

构造函数为new Cesium.Cartesian2(x, y),屏幕左上角为原点,x右为正,y下为正

cesium.cartesian3.fromdegrees,cesium,3d,javascript

而openlayers中

cesium.cartesian3.fromdegrees,cesium,3d,javascript

[2]笛卡尔空间直角坐标系统

在GIS引擎中也称这种笛卡尔空间直角坐标系为(World Geodetic System 1984 (WGS84) 坐标系)

  • 原点为参考椭球的中心
  • 这个坐标系固定在地球上;当地球自转时,系统也会自转,WGS84 中定义的物体相对于地球保持固定
  • x 轴指向地理坐标 (0°, 0°),y 轴指向 (90°, 0°),z 轴指向北极。赤道位于 xy 平面内。这是一个右手坐标系,因此 x × y = z,其中 x、y 和 z 是沿各自轴的单位向量
  • cesium中构造函数为new Cesium.Cartesian3(x, y, z)

注意这里不要和WGS84地理坐标或者是WGS84椭球体混淆,这只是一个三维的笛卡尔坐标系的定义(只是指定轴向,原点位置等),并不像WGS84那样包含一些椭球参数

cesium.cartesian3.fromdegrees,cesium,3d,javascript

[3]地理坐标

new Cesium.Cartographic(longitude, latitude, height)

  • 经度:参考椭球面上某点的大地子午面与本初子午面间的两面角。东正西负。
  • 纬度:参考椭球面上某点的法线与赤道平面的夹角。北正南负。
    cesium.cartesian3.fromdegrees,cesium,3d,javascript

注:Cartographic的经纬度是用弧度表示的,经纬度其实就是角度。弧度即角度对应弧长是半径的倍数。

所以经纬度是以弧度为单位的,高度是以米为单位。

弧度= π / 180 × 角度
角度=180 / π × 弧度

cesium.cartesian3.fromdegrees,cesium,3d,javascript

2.cesium坐标转换

[1]角度与弧度的转换
//角度转弧度
var radians = Cesium.CesiumMath.toRadians(degrees)
//弧度转角度
var degrees = Cesium.CesiumMath.toDegrees(radians)
[2]地理坐标转Cartesian3

Cesium在绘图过程中需要使用笛卡尔空间直角坐标(如WGS84笛卡尔坐标系),因此需要将经纬度坐标转换为笛卡尔坐标,才能用于绘图。
cartographic:弧度制表示的地理坐标系。使用(经度,纬度,大地高)表示。

(1)直接经过经纬度转换
角度制的地理坐标转Cartesian3

直接转换:

Cesium.Cartesian3.fromDegrees(longitude, latitude, height, ellipsoid, result)
ellipsoid:该Cartesian3所使用的椭球,默认为Ellipsoid.WGS84
result:存储结果的对象
Cesium.Cartesian3.fromDegreesArray(coordinates, ellipsoid, result)
coordinates:经纬度数组列表,用于批量转换[经度,纬度,进度,纬度,。。。。]
let cartesian3s = Cesium.Cartesian3.fromDegreesArrayHeights(coordinates);
coordinates:[经度,纬度,高度,进度,纬度,高度]
弧度制与笛卡尔转换

弧度制也类似,使用Cesium.Cartesian3.fromRadians, Cesium.Cartesian3.fromRadiansArray, Cesium.Cartesian3.fromRadiansArrayHeights

(2)使用椭球体转换
//先转换为弧度坐标
let position = Cesium.Cartographic.fromDegrees(lon, lat, height);
//获取viewer椭球体实例
let ellipsoid = viewer.scene.globe.ellipsoid;
//开始转换
let cartesian3 = ellipsoid.cartographicToCartesian(position);
// 多个坐标
let cartesian3s = ellipsoid.cartographicArrayToCartesianArray(positions);
[3]Cartesian3转地理坐标
(1)直接转换
//直接转换得到的是WGS84弧度制的经纬度坐标,可将其再转换为角度制。
let cartographic = Cesium.Cartographic.fromCartesian(cartesian3);
(2)通过椭球体转换
//需要选着或创建地理坐标的椭球体参数
// 单个坐标
let cartographic = Cesium.Ellipsoid.WGS84.cartesianToCartographic(cartesian3);
// 多个坐标
let cartographics = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographic(cartesain3Array);
[4]Cartesian2与Cartesian3互转

屏幕坐标和迪卡尔空间直角坐标系的转换

(1)Cartesian2转Cartesian3

屏幕转椭球面笛卡尔坐标,不包含地形、模型等的坐标
Cesium中的Camera提供了pickEllipsoid方法:传送门

let cartesain3 = viewer.scene.camera.pickEllipsoid(cartesian2);

屏幕转场景坐标,包含地形和模型等的场景空间坐标
使用Scene类中的pickPosition方法实现:传送门

let cartesian3 = viewer.scene.pickPosition(cartesian2);

屏幕坐标转地表笛卡尔空间坐标
通过相机与屏幕点位连线来求取坐标。
使用Scene类中globe属性中的pick方法:

let ray = viewer.camera.getPickRay(cartesian2);
let cartesian3 = globe.pick(ray,viewer.scene);
(2)Cartesian3转Cartesian2

Cesium提供了SceneTransforms的wgs84ToWindowCoordinates方法将笛卡尔坐标转换为屏幕坐标文章来源地址https://www.toymoban.com/news/detail-793006.html

let cartesian2 = Cesium.SceneTransforms.wgs84ToWindowCoordinates(cartesian3);

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

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

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

相关文章

  • 【超图】SuperMap iClient3D for WebGL/WebGPU —— 坐标系&位置 —— Cartesian2

    作者:taco         说到关于地理必然逃不开位置的关系。借用百度百科的内容来说 地理学(geography) ,是研究地球表层 空间地理 要素或者地理综合体 空间分布规律 、时间演变过程和 区域 特征的一门学科。 所以 位置坐标系 必然逃不掉了。那么在SuperMap iClient3D for Web

    2024年01月16日
    浏览(53)
  • 齐次坐标变换的理解以及在无人机相机定位坐标系转换中的应用

    4*4矩阵的右边三个数表示平移,如果原来的向量u的w=0,那么就是u+(ai+bj+ck) 对应xyz三个轴的循环变换,注意负号的位置 用描述空间一点的变换方法来描述物体在空间的位置和方向。 先变换的矩阵乘在右边。 A p = B p + A p B o {}^{A}p={}^{B}p+{}^{A}p_{B_{o}} A p = B p + A p B o ​ ​ 从

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

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

    2024年02月06日
    浏览(176)
  • cesium学习记录04-坐标系

    这些坐标定义了在用户的显示屏上的像素位置。例如,一个点的屏幕坐标可能是(x, y),其中x是从屏幕的左边开始的像素数,y是从屏幕的顶部开始的像素数。 这是一个三维空间中的点的坐标。在Cesium中,地球通常在(0,0,0)笛卡尔坐标中被建模。其他对象(如飞机或卫星)的位置

    2024年02月13日
    浏览(44)
  • Cesium屏幕中心、相机坐标和距离计算

    moveRotation方法参数中第一个参数step是移动步长,第二个参数i是判断是否是俯仰角还是航向角进行绕中心点进行翻滚,entity可以另外分离出来做一个方法,这样避免每次调用moveRotation方法都生成一个entity覆盖物。 该方法的参数distance接受正负数,对应上升和下降

    2024年01月18日
    浏览(42)
  • [自动驾驶算法][从0开始轨迹预测]:二、自动驾驶系统中常用的坐标系及相应的转换关系

    写在前面:上一篇文章中,我们介绍了坐标转换的基础知识,接下来,我们将介绍由汽车的传感器到全局定位会涉及到的若干个坐标系统。 下图是自动驾驶系统中常见的坐标系统: ​ 一般来说, 典型的定位和建图场景情况,不同坐标系之间的关系如下: ​ 环境传感器数据

    2024年01月16日
    浏览(50)
  • cesium mapboxgl+threebox glb 朝向问题 坐标轴方向

    一、3Dbuilder打开glb 二、cesium在pitch和heading都为0的情况下,不设置模型的朝向 三、mapboxgl+threebox在pitch和bearing都为0的情况下,不设置模型的朝向 四、对于地图默认视角,cesium设置pitch=-90、heading=0的时候和mapboxgl+threebox设置pitch=0、bearing=0的时候地图视角相同 五:cesium坐标轴:

    2024年02月22日
    浏览(37)
  • 通过mars3d1.8+cesium1.6根据坐标获取对应坐标在3dtiles模型上的高度

    在前端开发中,使用地图和3D模型的需求越来越常见。然而,对于一些开发者来说,如何在3D模型上获取对应坐标的高度可能是一个挑战。在本文中,我们将介绍如何使用mars3d1.8和cesium1.6这两个强大的前端库来实现这一功能。 mars3d是一个基于Cesium的地图开发引擎,可以帮助您

    2024年02月12日
    浏览(41)
  • cesium内部相同坐标在不同高度的2个点的属性机制坐标会gltf模型角度值异常问题mars3d的处理办法

    模型一直向上运动的正常效果: 问题场景: 1.new mars3d.graphic.ModelPrimitive({使用addDynamicPosition(设置并添加动画轨迹位置,按“指定时间”运动到达“指定位置”时发现,如果是同一个点位不同高度值的y轴竖直向上方向的运动。 指定pitch:270偏转角度的时候,会出现模型的角度值

    2024年01月18日
    浏览(47)
  • 机器人坐标系转换从局部坐标系转换到世界坐标系

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

    2024年04月16日
    浏览(66)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包