• 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);的结果为:

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

  • 相关阅读:
    【智能算法】回溯搜索算法(BSA)原理及实现
    内核中的互斥锁的使用
    VIM指令
    数据结构-树(Tree)
    PRLu算子UT测试问题
    J2L3x 最大的优势:灵活的功能和易于扩展性
    LeetCode(力扣)53. 最大子数组和Python
    网络安全——(黑客)自学
    生成模型 评价指标 D-1,distinct-n
    day57:ARMday4,程序状态寄存器读写指令、软中断指令、C和汇编的混合编程、开发板介绍
  • 原文地址:https://blog.csdn.net/tianyapai/article/details/126540421