李香清
(1.蘭州市勘察測繪研究院,甘肅蘭州 730030; 2.蘭州市地理信息中心,甘肅蘭州 730030)
基于對話框編寫實現坐標方位角正算與反算的程序
李香清1,2?
(1.蘭州市勘察測繪研究院,甘肅蘭州 730030; 2.蘭州市地理信息中心,甘肅蘭州 730030)
通過Visual C++6.0來設計坐標正反算的程序,基于對話框來編寫,特別是在控制網平差計算中,用來坐標方位角的推算和平面坐標的正反算,在導線測量中,通過坐標的正反算來確保控制網的精度。該程序可以廣泛應用于施工放樣等相關工作中,并且用實際的測量工作驗證了其準確性和實用性。
坐標正反算;Visual C++;坐標方位角;導線測量
在實際測量工作時,比如在市政工程施工測量中,經常會遇到根據已知導線控制點,利用經緯儀、鋼尺測設待定點的實際問題,解決此類問題往往需要計算坐標方位角或距離,如何能夠更快、更準確的利用程序實現坐標方位角的正算與反算是一個亟待研究的問題。
2.1 方位角
由直線一端的基本方向起,順時針方向至該直線的水平角度稱為該直線的方位角。方位角的取值范圍是0°~360°。下面介紹相關的三種方位角:
真方位角:由真北方向起算的方位角,用A表示。坐標方位角:由坐標北方向起算的方位角,用a表示。磁方位角:由磁北方向起算的方位角,用Am表示。
2.2 方位角之間的相互換算
由于三個指北的標準方向并不重合,所以一條直線的三種方位角并不相等,它們之間存在著一定的換算關系。如圖1所示,一條直線的真方位角A、磁北方位角Am、坐標方位角a之間有如下的關系式,式中的δ為磁偏角,γ為子午線收斂角。

圖1 三種方位角的關系
關系表達式如下:

2.3 正、反坐標方位角
一條直線的坐標方位角,由于起始點的不同而存在著兩個值。如圖2所示,P1、P2為直線P1P2的兩端點,a12表示P1P2方向的坐標方位角,a21表示P2P1方向的坐標方位角。a12和a21互為正、反坐標方位角。若以a12為正坐標方位角,則稱a21為反坐標方位角。由于在同一高斯平面直角坐標系內各點處坐標北方向均是平行的,所以一條直線的正、反坐標方位角相差180°,即a12=a21±180°。

圖2 正、反坐標方位角 圖3 坐標正、反算示意圖
如圖3所示,設A為已知點,B為未知點,當A點坐標(XA,YA)、A點至B點的水平距離SAB和坐標方位角aAB均為已知時,則可求得B點的坐標(XB,YB),通常稱為坐標正算問題。
由圖可知坐標正算的公式為:


所以上面的式子可以寫成:

式中的△XAB和△XAB稱之為坐標增量。
同理可以得出坐標反算的公式,設A、B兩已知點的坐標分別為(XA,YA)和(XB,YB),則這條直線AB的坐標方位角aAB和水平距離SAB分別為:

應當指出,在上面的式子中△XAB和△YAB應該取絕對值,計算得到的為象限角R,象限角取值范圍為0°~90°。而測量工作中通常用坐標方位角表示直線的方向,因此,計算出象限角R后,應該將其轉換為坐標方位角,其轉換方法表1。

象限角轉換成坐標方位角 表1
4.1 對話框界面的設計

圖4 對話框的界面設計
4.2 坐標正算程序的核心代碼
void Czbzs::OnButtonEqual2()//響應坐標正算按鈕
{
//TODO:Add your control notification handler code here
UpdateData(true);//獲得輸入數據
i=m_44; //坐標方位角獲取
//為減少運算,先計算幾種特殊情況
if(i==0||i==360)
{
m_55=m_11+m_33;
m_66=m_22;
}
else if(i==180)
{
m_55=m_11-m_33;
m_66=m_22;
}
else if(i==90)
{
m_55=m_11;
m_66=m_22+m_33;
}
else if(i==270)
{
m_55=m_11;
m_66=m_22-m_33;
}
else if(i>0&&i<90)//第一象限角
{
j=(m_44?PI)/180;//角度轉換為弧度
m_55=m_11+m_33?cos(j);//由表一和公式8、公式9綜合
m_66=m_22+m_33?sin(j);
}
else if(i>90&&i<180)//第二象限角
{
j=((m_44-90)?PI)/180;
m_55=m_11+m_33?(-cos(j));
m_66=m_22+m_33?sin(j);
}
else if(i>180&&i<270)//第三象限角
{
j=((m_44-180)?PI)/180;
m_55=m_11+m_33?(-cos(j));
m_66=m_22+m_33?(-sin(j));
}
else if(i>270&&i<360)//第四象限角
{
j=((m_44-270)?PI)/180;
m_55=m_11+m_33?cos(j);
m_66=m_22+m_33?(-sin(j));
}
UpdateData(false);//更新顯示
}
4.3 坐標反算程序的核心代碼
void Czbfs::OnButtonEqual()//響應坐標反算按鈕
{
//TODO:Add your control notification handler code here
UpdateData(true);//獲得輸入數據
dx=m_3-m_1;
dy=m_4-m_2;
az1=dxdy_az(dx,dy);//計算坐標方位角
az=radio_to_angle(az1);//弧度轉換為角度
s=dist(dx,dy);//計算距離
m_5=m_9;
m_6=m_10;
m_7=az1;
m_8=s;
UpdateData(false);//更新顯示
}
double Czbfs::dxdy_az(double dx,double dy)//坐標方位角計算
{
double R,az;
R=atan(dy/dx);//公式10
if(dx==0)//特殊情況
{
if(dy>0)
az=PI/2;
else
az=3?PI/2;
}
else if(dx>0)//由表一得出az與R關系
{
if(dy>0)
az=R;
else
az=R+2?PI;
}
else
az=PI+R;
return(az);
}
double Czbfs::radio_to_angle(double radio)//弧度轉換為角度
{
double a1,a2,angle;
int d,f,m;
a1=radio?180/PI;
d=int(a1);//計算度
a2=(a1-d)?60;
f=int(a2);//計算分
m=int((a2-f)?60);//計算秒angle=d+f/100.0+m/10000.0;
return(angle);
}
double Czbfs::dist(double dx,double dy)//計算距離
{
return(sqrt(dx?dx+dy?dy));
}
將外業實測數據進行坐標方位角的推算和平面坐標的正反算,通過坐標的正反算來確保控制網的精度。在坐標反算主界面中輸入起點:1點坐標(4053345.321,486456.321),終點2點坐標(4053323.678,486123.443),通過計算得出坐標方位角(弧度)為4.64746249773597,1點到2點的距離為333.580848270678;在坐標正算主界面中輸入起點:1點坐標(4053321.476,485123.443),距離334.756,坐標方位角(角度)213.342,通過計算得出終點坐標為(4053041.81926841,484939.449271809)。計算結果如圖5所示:

圖5 坐標正反算的驗證結果
本文通過對坐標正反算的驗證得出該程序的可靠性與實用性,基于對話框編寫的該程序,界面直觀簡潔,使計算方位角的工作變得簡單易行,實現坐標方位角的正反算更加方便快捷,可以廣泛應用于工程測量的施工放樣及相關工作中,大幅降低了測繪工作量。
[1] 潘正風,楊正堯,程效軍等.數字測圖原理與方法[M].武漢大學出版社,2004.
[2] 王育堅.Visual C++面向對象編程教程[M].清華大學出版社,2007.
[3] 沈晶,劉海波,周長建.Visual C++數字圖像處理典型案例詳解[M].機械工業出版社,2012.
[4] 武漢大學測繪學院測量平差學科組.誤差理論與測量平差基礎[M].武漢大學出版社,2003.
[5] 陳天華.面向對象程序設計與Visual C++6.0教程題解與實驗指導[M].清華大學出版社,2006.
[6] 張正祿.工程測量學[M].武漢大學出版社,2005.
Based on the Dialog Box to W rite the Program to Realize Direct and Inverse Calculation of Geodetic Coordinates and Azimuth
Li Xiangqing1,2
(1.Lanzhou Istitute of Survey and Investigation,Lanzhou 730030,China;2.Lanzhou Geographic Information Center Gansu,Lanzhou 730030,China)
Through the Visual C++6 to design the inverse coordinate calculation program,based on the dialog box to write,especially the calculation in the control network adjustment,and to calculate the coordinate azimuth angle and plane coordinates calculation,in a traverse,through coordinate and ensure the precision of the control network.This program iswidely used in construction lofting and related work and verified its accuracy and reliability by using examples.
direct and inverse calculation of coordinates;visual C++;coordinate azimuth;traverse survey
1672-8262(2013)05-137-03
P209
B
2013—06—28
李香清(1978—),女,工程師,現從事地理信息空間數據質量檢查、GIS應用研究及開發等。