js实现卫星天线方位角和仰角

参数含义:
SATLONG:经度
SATLAT:维度

function CalculateAZ(SATLONG,SATLAT) {
    var DTOR, RTOD, A, B, F, RSAT, ESHEIGHT, ESLAT, ESLONG, SATLAT, SATLONG, XS, YS, ZS, EE, BETA, RHO;
    var TXS, TYS, TZS, DIST, AZ, XS2, YS2, ZS2, TXS2, TYS2, TZS2, DIST2, RANGE;

    DTOR=Math.PI/180; RTOD=180/Math.PI; A=6378.3880;    B=6356.9120;    F=1/297;
    RSAT=Math.pow((6028.82*((24*60)-4)), 2/3);
    /*Check(window.document.Form.ESH, "0");
    Check(window.document.Form.ESLA, "0");
    Check(window.document.Form.ESLO, "0");
    Check(window.document.Form.SATLA, "0");
    Check(window.document.Form.SATLO, "0");*/
    //以北京为观测点
    ESHEIGHT=0;//高度
    ESLAT=40;//维度
    ESLONG=116;//经度
    /*SATLAT=1.7282723;
    SATLONG=58.78332;*/
    XS=RSAT*Math.cos(DTOR*SATLAT)*Math.cos(DTOR*SATLONG);
    XS2=RSAT*Math.cos(-SATLAT*DTOR)*Math.cos(SATLONG*DTOR);
    YS=RSAT*Math.cos(DTOR*SATLAT)*Math.sin(DTOR*SATLONG);
    YS2=RSAT*Math.cos(-SATLAT*DTOR)*Math.sin(SATLONG*DTOR);
    ZS=RSAT*Math.sin(DTOR*SATLAT);
    ZS2=-RSAT*Math.sin(DTOR*SATLAT);
    EE=2*F - Math.pow(F, 2);
    BETA=Math.atan((1-EE)*Math.tan(ESLAT*DTOR));
    RHO=A*(1-F)/Math.sqrt(1-(2-F)*F*Math.cos(ESLAT*DTOR)*Math.cos(ESLAT*DTOR));
    TXS=(XS*Math.cos(ESLONG*DTOR)+YS*Math.sin(ESLONG*DTOR)-RHO*Math.cos(BETA))*Math.sin(ESLAT*DTOR)-(ZS-RHO*Math.sin(BETA))*Math.cos(ESLAT*DTOR);
    TXS2=(XS2*Math.cos(ESLONG*DTOR)+YS2*Math.sin(ESLONG*DTOR)-RHO*Math.cos(BETA))*Math.sin(ESLAT*DTOR)-(ZS2-RHO*Math.sin(BETA))*Math.cos(ESLAT*DTOR);
    TYS=-XS*Math.sin(ESLONG*DTOR)+YS*Math.cos(ESLONG*DTOR);
    TYS2=-XS2*Math.sin(ESLONG*DTOR)+YS2*Math.cos(ESLONG*DTOR);
    TZS=(XS*Math.cos(ESLONG*DTOR)+YS*Math.sin(ESLONG*DTOR)-RHO*Math.cos(BETA))*Math.cos(ESLAT*DTOR)+(ZS-RHO*Math.sin(BETA))*Math.sin(ESLAT*DTOR)-(ESHEIGHT/1000);
    TZS2=(XS2*Math.cos(ESLONG*DTOR)+YS2*Math.sin(ESLONG*DTOR)-RHO*Math.cos(BETA))*Math.cos(ESLAT*DTOR)+(ZS2-RHO*Math.sin(BETA))*Math.sin(ESLAT*DTOR)-(ESHEIGHT/1000);
    DIST=Math.sqrt(TXS*TXS+TYS*TYS+TZS*TZS);
    DIST2=Math.sqrt(TXS2*TXS2+TYS2*TYS2+TZS2*TZS2)
    AZ=180-RTOD*ATAN2(TXS,TYS);
    EL=Math.asin(TZS/DIST)*RTOD;
    RANGE=Math.max(DIST, DIST2);

    var m=[];
    m[0]=round(AZ, 3);//方位角
    m[1]=round(EL, 3);//仰角
    //round(RANGE, 3);//最大距离,单位km
    return m;
}

function Check(obRef, def) {
    if ((obRef.value == null) || (obRef.value == "")) {
        obRef.value = def;
    }
}

function ATAN2(x, y) {
    var tmp;
    if (y == 0) {
        if (x > 0) {
            tmp = 0;
        } else {
            if (x < 0) {
                tmp = Math.PI;
            } else {
                tmp = 1/0;
            }
        }
    } else {
        if (y > 0) {
            tmp = (Math.PI/2) - Math.atan(x/y);
        } else {
            tmp = -(Math.PI/2) - Math.atan(x/y);
        }
    }
    return tmp
}

function round(val, places) {
    val = val * Math.pow(10, places)
    val = Math.round(val)
    val = val / Math.pow(10, places)
    return val
}

调用方式:

var am = [];
am=CalculateAZ("经度","维度");
alert("仰角"+am[1]);
alert("方位角"+am[0]);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值