测量计算编程——方位角

'定义角度输出格式(枚举类型)&nbsp

Enum&nbsprtnAzimuthFormat&nbsp
qd_DecimalDegree&nbsp
qd_DD_MM_SS_SeperatedByMinusSymbol&nbsp
qd_DD_MM_SS_SeperatedByDivideSymbol&nbsp
qd_Decimal_DD_MM_SS&nbsp
End&nbspEnum&nbsp

'(二维)点格式

Public&nbspType&nbspPoint&nbsp
X&nbspAs&nbspDouble&nbsp
Y&nbspAs&nbspDouble&nbsp
End&nbspType&nbsp

'方位角计算

'调用方法:

'rtnAz=surAzimuth(起始点,终点,返回格式,度(可选),分(可选),秒(可选))

'度(可选)表示只输出DD-MM-SS中的度部分,便于后续处理
Public&nbspfunction&nbspsurAzimuth(PointA&nbspAs&nbspPoint,&nbspPointB&nbspAs&nbspPoint,&nbsprtnFormat&nbspAs&nbsprtnAzimuthFormat,&nbspOptional&nbspDegree&nbspAs&nbspInteger,&nbspOptional&nbspMinute&nbspAs&nbspInteger,&nbspOptional&nbspSecond&nbspAs&nbspSingle)&nbspAs&nbspString&nbsp
Dim&nbspdeltX&nbspAs&nbspDouble,&nbspdeltY&nbspAs&nbspDouble&nbsp
Dim&nbspAziCal&nbspAs&nbspDouble&nbsp
Dim&nbsppi&nbspAs&nbspDouble&nbsp
Dim&nbspintD&nbspAs&nbspInteger,&nbspintM&nbspAs&nbspInteger,&nbspSec&nbspAs&nbspSingle,&nbspmm&nbspAs&nbspSingle&nbsp
pi&nbsp=&nbspAtn(1)&nbsp*&nbsp4&nbsp

deltX&nbsp=&nbspPointB.X&nbsp-&nbspPointA.X&nbsp
deltY&nbsp=&nbspPointB.Y&nbsp-&nbspPointA.Y&nbsp+&nbsp1E-20&nbsp

AziCal&nbsp=&nbsp(pi&nbsp-&nbsppi&nbsp/&nbsp2&nbsp*&nbspSgn(deltY)&nbsp-&nbspAtn(deltX&nbsp/&nbspdeltY))&nbsp*&nbsp180&nbsp/&nbsppi&nbsp

intD&nbsp=&nbspInt(AziCal)&nbsp
mm&nbsp=&nbsp(AziCal&nbsp-&nbspintD)&nbsp*&nbsp60#&nbsp
intM&nbsp=&nbspInt(mm)&nbsp
Sec&nbsp=&nbspRound((mm&nbsp-&nbspintM)&nbsp*&nbsp60,&nbsp2)&nbsp

&nbspDegree&nbsp=&nbspintD&nbsp
&nbspMinute&nbsp=&nbspintM&nbsp
&nbspSecond&nbsp=&nbspSec&nbsp

Select&nbspCase&nbsprtnFormat&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCase&nbspqd_DecimalDegree&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsurAzimuth&nbsp=&nbspAziCal&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCase&nbspqd_DD_MM_SS_SeperatedByMinusSymbol&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsurAzimuth&nbsp=&nbspFormat(intD,&nbsp"0")&nbsp&&nbsp""&nbsp&&nbspFormat(intM,&nbsp"00")&nbsp&&nbsp""&nbsp&&nbspFormat(Sec,&nbsp"0.00")&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCase&nbspqd_DD_MM_SS_SeperatedByDivideSymbol&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsurAzimuth&nbsp=&nbspFormat(intD,&nbsp"0")&nbsp&&nbsp"/"&nbsp&&nbspFormat(intM,&nbsp"00")&nbsp&&nbsp"/"&nbsp&&nbspFormat(Sec,&nbsp"0.00")&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCase&nbspqd_Decimal_DD_MM_SS&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsurAzimuth&nbsp=&nbspFormat(intD,&nbsp"0")&nbsp&&nbsp"."&nbsp&&nbspFormat(intM,&nbsp"00")&nbsp&&nbspFormat(Sec&nbsp*&nbsp100,&nbsp"00")&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspCase&nbspElse&nbsp
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspsurAzimuth&nbsp=&nbspAziCal&nbsp
End&nbspSelect&nbsp

End&nbspfunction

发表评论

您的邮箱不会被公开。* 为必填项