• cesium wgs84 经纬度转笛卡尔坐标


            在cesium中默认使用的是wgs84椭球,关于如何将wgs84经纬度坐标转换成笛卡尔坐标,cesium代码如下:

            

    1. // 将经纬度转换成笛卡尔坐标
    2. Ellipsoid.prototype.cartographicToCartesian = function (cartographic, result) {
    3. //`cartographic is required` is thrown from geodeticSurfaceNormalCartographic.
    4. var n = cartographicToCartesianNormal;
    5. var k = cartographicToCartesianK;
    6. // 计算给定点在地球表面的法线
    7. this.geodeticSurfaceNormalCartographic(cartographic, n);
    8. // 计算球面坐标
    9. Cartesian3.multiplyComponents(this._radiiSquared, n, k);
    10. var gamma = Math.sqrt(Cartesian3.dot(n, k));
    11. Cartesian3.divideByScalar(k, gamma, k);
    12. // 计算高程向量
    13. Cartesian3.multiplyByScalar(n, cartographic.height, n);
    14. if (!defined(result)) {
    15. result = new Cartesian3();
    16. }
    17. // 返回笛卡尔坐标
    18. return Cartesian3.add(k, n, result);
    19. };

    其中计算过程如下

           函数 this.geodeticSurfaceNormalCartographic(cartographic, n);的计算公式为:

            n = vec3(cos(θ)*cos(β),cos(θ)*sin(β),sin(θ));

           函数Cartesian3.multiplyComponents(this._radiiSquared, n, k);的计算公式为:

           k = vec3((a^2*cos(θ)*cos(β),b^2*cos(θ)*sin(β),c^2*sin(θ));

            常规的球面参数方程为:x = a*cos(θ)*cos(β),y = b*cos(θ)*sin(β) ,z = c*sin(θ).之所以使用平方的形式是因为后面还要点乘vec3(a,b,c)向量,这里提前做了后面就不在相乘了。

            函数var gamma = Math.sqrt(Cartesian3.dot(n, k));的计算公式为:

            gamma = [[(a*cos(θ)*cos(β)]^2,[b*cos(θ)*sin(β)]^2,[c*sin(θ)]^2]^(1/2);

            是为了向量的归一化时做被除数;

           函数 Cartesian3.divideByScalar(k, gamma, k);的公式为:

           k = k / gamma;表示的意义为椭球向量的归一化后再乘以(a,b,c);

           k = vec3(a,b,c) 点乘 [vec3(a*cos(θ)*cos(β),b*cos(θ)*sin(β),c*sin(θ)) / ([a*cos(θ)*cos(β)]^2 + [b*cos(θ)*sin(β)]^2 + [c*sin(θ)]^2)^(1/2)];

          函数Cartesian3.multiplyByScalar(n, cartographic.height, n);的公式为

           n = vec3(cos(θ)*cos(β),cos(θ)*sin(β),sin(θ)) * height; 意义为地球表面的高程方向向量。

          函数Cartesian3.add(k, n, result);的结果为:

            点再地球表面的向量加上点再地球表面的高程向量

  • 相关阅读:
    构建高效的BFF(Backend for Frontend):优化前端与后端协作
    低代码助力生产管理:ERP生产管理系统
    Dubbo client can not supported string message
    Spring源码十九:Bean实例化流程二
    可执行文件的装载与进程
    Linux学习笔记12 - 进程间通信(IPC)(三)
    pip 时报错 no such option: --bulid-dir 的解决办法
    工具篇--分布式定时任务springBoot--elasticjob简单使用(1)
    高速公路车路协同网络需求研究
    3D项目中用到的一些算法
  • 原文地址:https://blog.csdn.net/tianyapai/article/details/126540421