js实现地固坐标系转WGS84

直接上代码

        //******************************************转换数据********************************************** */
                let StateTime = [];
                let UtcTime=[];
                let Hour=[];
                let State_Xr=[];
                let State_Yr=[];
                let State_Zr=[];
                let Path_Czm=[];
                for (let i = 0; i < EcefData.length; i++){
                    StateTime.push(EcefData[i].time);
                    var B_pos = StateTime[i].indexOf('B');
                    var hour_data = StateTime[i].substr(B_pos+1,2);
                    Hour.push(hour_data);
                    var newhour_data = Hour[i]-8;
                    var year_month_day = StateTime[i].slice(0,B_pos);
                    var hour_minute_second = StateTime[i].slice(B_pos+3,EcefData.length);
                    var new_time = year_month_day+"T"+newhour_data+hour_minute_second+"Z";
                    UtcTime.push(new_time);//转换后UTC时间                   
        //******************************************转换数据结束****************************************** */ 

       //******************************************坐标转换********************************************* */  
                    var state_px = EcefData[i].Xr;
                    var state_py = EcefData[i].Yr;
                    var state_pz = EcefData[i].Zr;
                    var  epsilon = 0.000000000000001;
                    var  d2r = Math.PI / 180;
                    var  r2d = 180 / Math.PI;

                    var  a = 6378137.0;		//椭球长半轴
                    var  f_inverse = 298.257223563;			//扁率倒数
                    var  b = a - a / f_inverse;
                    //const double b = 6356752.314245;			//椭球短半轴
                    var  e = Math.sqrt(a * a - b * b) / a;//e
                    var tmpX =  state_px;
                    var temY = state_py ;
                    var temZ = state_pz;

                    var curB = 0;
                    var N = 0; 
                    var calB = Math.atan2(temZ, Math.sqrt(tmpX * tmpX + temY * temY)); 
                    
                    var counter = 0;
                    while (Math.abs(curB - calB) * r2d > epsilon  && counter < 25)
                    {
                        curB = calB;
                        N = a / Math.sqrt(1 - e * e * Math.sin(curB) * Math.sin(curB));
                        calB = Math.atan2(temZ + N * e * e * Math.sin(curB), Math.sqrt(tmpX * tmpX + temY * temY));
                        counter++;	
                    } 	   
                    
                    // State_Xr.push(Math.atan2(temY, tmpX) * r2d);//lon
                    // State_Yr.push(curB * r2d);                  //lat
                    // State_Zr.push(temZ / Math.sin(curB) - N * (1 - e * e));//alt
                    // var State_XrString = State_Xr.toString();
                    // var State_YrString = State_Yr.toString();
                    // var State_ZrString = State_Zr.toString();
                    var State_XrString = Math.atan2(temY, tmpX) * r2d;	
                    var State_YrString = curB * r2d;
                    var State_ZrString = temZ / Math.sin(curB) - N * (1 - e * e);
                    Path_Czm.push(State_XrString,State_YrString,State_ZrString);
                    console.log(Path_Czm)                   
                };  
        //******************************************坐标转换结束********************************************* */
        最后添加一个动态添加czml的链接:http://cesium.xin/wordpress/archives/204.html
        设置czml的链接:https://www.freesion.com/article/1108522610/
        cesium学习:https://zhuanlan.zhihu.com/p/80904975
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值