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

来源:互联网 发布:图片识别算法 编辑:程序博客网 时间:2024/05/02 17:19

参数含义:
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 0