您的位置:

Cesium坐标系详解

Cesium是一款用于构建地球上3D地图的开源JavaScript库。它采用WebGL技术,能够在不同的浏览器和平台上展示高性能和高质量的3D地图。作为一个3D地图API,不论是在定位、导航还是数据可视化方面,Cesium均非常优秀。本文将全面介绍Cesium坐标系,包括坐标系转换、CGCS2000坐标系、笛卡尔坐标系、模型坐标系、局部坐标系等。

一、Cesium坐标系转换

Cesium中的坐标系转换是很重要的。在Cesium中,通过viewer.scene.globe.ellipsoid.cartesianToCartographic(position)将笛卡尔坐标系的position转换成经纬度信息,便于进行地理信息的处理和可视化。相反地,通过viewer.scene.globe.ellipsoid.cartographicToCartesian(cartographic)可以将经纬度转换成笛卡尔坐标系。
//笛卡尔坐标系转经纬度信息
var position = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);
var cartographic = Cesium.Cartographic.fromCartesian(position);
var longitudeStr = Cesium.Math.toDegrees(cartographic.longitude).toFixed(5);  
var latitudeStr = Cesium.Math.toDegrees(cartographic.latitude).toFixed(5);  

二、Cesium坐标系墨卡托

在使用Cesium进行地图开发时,可通过坐标系墨卡托进行横向距离的计算。Cesium提供两种墨卡托投影方式,一种是Web墨卡托投影,一种是标准墨卡托投影。它们的区别在于标准墨卡托投影比Web墨卡托投影偏右。Web墨卡托进行横向距离的计算公式为:
function getWebMeratorDist(start, end) {
    var dlat = Cesium.Math.toRadians(end.latitude - start.latitude);
    var dlon = Cesium.Math.toRadians(end.longitude - start.longitude);
    var boundary = Cesium.Math.EPSILON12;
    if (Cesium.Math.equalsEpsilon(Math.abs(dlat), boundary, 0) && Cesium.Math.equalsEpsilon(Math.abs(dlon), boundary, 0)) {
        return 0;
    }
    var a = 6378137.0;
    var k = 1.0;
    if (start.latitude !== 0.0 && (Math.abs(start.latitude) > boundary)) {
        var b = a * (1.0 - 1.0 / 298.257223563) / Math.sqrt(1.0 - Math.pow(0.0818191908425, 2) * Math.pow(Math.sin(Cesium.Math.toRadians(start.latitude)), 2));
        k = Math.cos(Cesium.Math.toRadians(start.latitude)) * (a + b) / a;
    }
    return Math.sqrt(Math.pow(k * dlat, 2) + Math.pow(k * Math.cos(Cesium.Math.toRadians(end.latitude)) * dlon, 2));
}

三、Cesium坐标系说明

Cesium使用的坐标系采用的是WGS84坐标系。这是一种基于椭球的坐标系,主要用于地球测量领域。在Cesium中,Ellipsoid类表示一个三维的椭球体,Ellipsoid.WGS84即为WGS84坐标系。
var ellipsoid = Cesium.Ellipsoid.WGS84;

四、Cesium坐标系CGCS2000

CGCS2000是中国大地坐标系2000,也是国际标准。Cesium中也提供了CGCS2000坐标系的支持。我们可以通过在 viewer.camera.lookAtTransform(mapMatrix)修改当前摄像机的姿态和视图来完成CGCS2000坐标系的展示。
var mapMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(center, ellipsoid);
viewer.camera.lookAtTransform(mapMatrix, new Cesium.Cartesian3(0.0, 0.0, height));

五、Cesium 2000坐标系

Cesium 2000坐标系是一种Cesium自定义的坐标系,在场景中默认使用。与WGS84坐标系非常接近。我们可以使用 Cesium.Transforms.preloadIcrfFixed() 来预先加载并计算 ICRF 到 固定坐标系 的变换矩阵。
Cesium.Transforms.preloadIcrfFixed();

六、Cesium笛卡尔坐标系

Cesium中采用笛卡尔坐标系来描述位置、速度和加速度等,即{x,y,z}坐标。我们可以通过Cesium.Cartesian3类来初始化笛卡尔坐标系的位置坐标,将一个经纬度转换成笛卡尔坐标系的位置,或是在笛卡尔坐标系中进行2D和3D点位操作。
var position = new Cesium.Cartesian3(x, y, z);   //初始化笛卡尔坐标系的位置坐标
var cartesian = Cesium.Cartesian3.fromDegrees(longitude, latitude, height);   //将经纬度转换成笛卡尔坐标系的位置

七、Cesium模型坐标系

在Cesium中,模型坐标系是一种相对于父级的坐标系,可以将模型放置在场景中的特定位置和角度。我们可以使用Cesium.TransformationMatrix类来创建一个矩阵变换,使一个对象相对于另一个对象进行旋转、平移和缩放。
var hh = Cesium.Transforms.headingPitchRollQuaternion(cartesian3, new Cesium.HeadingPitchRoll(heading, pitch, roll));  //旋转变换

八、Cesium局部坐标系

局部坐标系是相对于另一个对象或父级的坐标系。在Cesium中,我们可以通过Cesium.ReferenceFrame类来创建一个局部坐标系。该局部坐标系的原点是相对于父级的位置,可以在场景中的任意地方移动、旋转和缩放。
var referenceFrame = new Cesium.ReferenceFrame({
    origin: position,
    axes: [new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(0.0, 1.0, 0.0), new Cesium.Cartesian3(0.0, 0.0, 1.0)]
});

九、Cesium默认坐标系

Cesium中默认的坐标系是俯视图的笛卡尔坐标系,即z轴垂直于地球表面。这种坐标系可以规避使得计算坐标系的方向向量时造成的所有复杂性,也比其它坐标系更容易被理解和使用。 以上就是Cesium坐标系的详细介绍。无论从坐标系转换、墨卡托投影、CGCS2000坐标系,到笛卡尔坐标系、模型坐标系、局部坐标系和默认坐标系,我们都详细讲解了相关知识点,并且提供了对应的代码示例。希望能对大家了解Cesium坐标系有所帮助。
Cesium坐标系详解

2023-05-19
cesiumjs模型,cesium 模型格式

本文目录一览: 1、Cesiumjs可以加载倾斜摄影的OSGB数据吗 2、Cesium 3Dtiles模型多边形裁剪简单整理 3、Cesium的扩展工具包-EarthSDK使用指南1 4、影像加载篇:

2023-12-08
cesiumjs详细教程(cesium开发教程)

本文目录一览: 1、Cesium在js中调用entity的infobox单机事件 2、Cesium初始化选项 3、Cesium随笔:视锥绘制(上) 4、cesium如何搭建dat.gui 5、Cesi

2023-12-08
关于earthsdk+cesium可以放大缩小的流光线的信息

2023-01-04
cesium滑块控制模型透明度-cesium滑块控制模型透明

2023-01-07
Cesium FlyTo详解

2023-05-18
Cesium——开发全球3D可视化应用的利器

2023-05-18
cesiumjs搭建,cesium geojson

本文目录一览: 1、Cesium的扩展工具包-EarthSDK使用指南1 2、构建一个 Vite + Vue3 项目 开发Cesium 3、Cesium实战项目 4、cesium如何搭建dat.gui

2023-12-08
全面解析Cesium Entity

2023-05-23
替代cesium,替代测试表

2022-11-29
cesiumjs编译(cesium nodejs)

本文目录一览: 1、Cesium初始化选项 2、cesium 和 Three.js有什么区别,以及二者与WebGL 的关系 3、Cesium(四)加载影像图层 4、Cesium在js中调用entity

2023-12-08
cesiumjs中文网地址,cesium中文文档

本文目录一览: 1、cesium 怎样设置web服务器 2、Cesium初始化选项 3、Cesium实战项目 4、Cesium的扩展工具包-EarthSDK使用指南1 5、Cesium(四)加载影像图

2023-12-08
Cesium中文API详解

2023-05-20
Cartesian3详细解析

2023-05-20
cesiumjs离线地图(cesium 离线地图)

本文目录一览: 1、Cesium可以加载百度地图吗 2、cesium地图瓦片404默认显示某张图片 3、cesium 和 Three.js有什么区别,以及二者与WebGL 的关系 Cesium可以加载

2023-12-08
java方法整理笔记(java总结)

2022-11-08
印象笔记记录java学习(Java成长笔记)

2022-11-12
bd09坐标系详解

2023-05-21
Cesium API详解

2023-05-19
Cesium 3DTileset详解

2023-05-18