两个经纬度偏角_怎么根据两个经纬度计算出航向
C/C++ codedouble 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||fStarPtx180.0f
||fStarPty90.0f||fEndPtx
||fEndPty>180.0f||fEndPty
{
// 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)或正弦、余弦等方式計算角度即可得到航向。
總結
以上是生活随笔為你收集整理的两个经纬度偏角_怎么根据两个经纬度计算出航向的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技术写作中的那些神兵利器
- 下一篇: 二分查找和二分答案