首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么根据两个经纬度计算出航向

2012-06-20 
如何根据两个经纬度计算出航向?已知A点LAT40.14023,LON116.88945B点LAT40.12394,LON117.05897求出航向

如何根据两个经纬度计算出航向?
已知A点LAT=40.14023,LON=116.88945
B点LAT=40.12394,LON=117.05897
求出航向(航向已知,104度)

[解决办法]
我们用的函数:

C/C++ code
double CChartCtrl::CalcltDirct(float fStarPtx, float fStarPty, float fEndPtx, float fEndPty){    //已知起始点坐标(fStartPtx, fStartPty)及到达点坐标(fEndPtx,fEndPty)    //计算航向fDirect.    //起始点,到达点坐标:经纬度    //航向:角度    //Created by zhl    //2002.7.2    //check param    CString strErr;    strErr.LoadString(IDS_CHK_15002);    if(fStarPtx>90.0f||fStarPtx<-90.0f||fStarPty>180.0f        ||fStarPty<-180.0f||fEndPtx>90.0f||fEndPtx<-90.0f        ||fEndPty>180.0f||fEndPty<-180.0f)    {//        AfxMessageBox(strErr);        return -1;    }    double delta_fy=fEndPtx-fStarPtx;    double delta_lnmg=fEndPty-fStarPty;    //经度差应小于180度    if(delta_lnmg < -180.0)        delta_lnmg += 360.0;    if(delta_lnmg > 180.0)        delta_lnmg -= 360.0;    //delta_lnmg > 0.0 从 西 ---> 东  delta_lnmg < 0.0 从 东 ---> 西    BOOL bGoEast=FALSE,bGoNorth=FALSE;    if(delta_lnmg >= 0.0)        bGoEast=TRUE;    else        bGoEast=FALSE;    //delta_fy > 0.0 从 南 ---> 北  delta_fy < 0.0 从 北 ---> 南    if(delta_fy>=0.0)        bGoNorth=TRUE;    else        bGoNorth=FALSE;        if(delta_fy==0)    {        if(delta_lnmg==0)return 0;        return bGoEast?90:270;    }    double d1=7915.7045*(e/2*log10((1-e*sin(fStarPtx*M_PI/180))        /(1+e*sin(fStarPtx*M_PI/180)))        +log10(tan((45+fStarPtx/2)*M_PI/180.0)));//纬度渐长率        double d2=7915.7045*(e/2*log10((1-e*sin(fEndPtx*M_PI/180))/        (1+e*sin(fEndPtx*M_PI/180)))        +log10(tan((45+fEndPtx/2)*M_PI/180.0)));//纬度渐长率        double delta_d=d2-d1;////纬度渐长率差(分)        double dbDir=atan(delta_lnmg*60/delta_d)*180/M_PI;    if(!bGoEast&&bGoNorth)dbDir=360+dbDir;    if(!bGoEast&&!bGoNorth)dbDir=180+dbDir;    if(bGoEast&&!bGoNorth)dbDir=180+dbDir;    return dbDir;}
[解决办法]
这个问题不难啊,LZ。这种距离不远的情况下无需考虑地球的曲率。所以直接按照平面坐标计算即可。记住几点:正北为0度,顺时针为正,这样两点之间,采用正切(tan)或正弦、余弦等方式计算角度即可得到航向。

热点排行