程序要求
新建一个VBA函数,用于计算经纬度偏移,并提供偏移后的经度和纬度,函数要求如下:
1、变量1:
偏移前的经度,如116.4325
2、变量2:
偏移前的纬度,如23.3425
3、变量3:
先填写个偏移角度,角度以正北为0度,瞬顺时针到359度
4、变量4:
偏移的长度,以米为单位
5、变量5:
填写返回的类型,偏移后的经度为1,偏移后的纬度为2 返回值:返回偏移后的经度或者纬度
函数:CalcLatLonOffset(经度,纬度,角度,以米为单位的位移量,返回的类型)
实现的代码
Function CalcLatLonOffset(lon As Double, lat As Double, angle As Double, distance As Double, returnType As Integer) As Double
'该函数用于按照某个角度和某个位移计算经纬度的偏移,并返回偏移后的经度和纬度
'示例CalcLatLonOffset(经度,纬度,角度,以米为单位的位移量,返回的类型)
’ lon: 经度
’ lat: 纬度
’ angle: 偏移角度,以正北为0度,顺时针到359度
’ distance: 偏移的长度,以米为单位
’ returnType: 返回的类型,经度为1,纬度为2
'将角度转为弧度
Dim radAngle As Double
radAngle = angle * WorksheetFunction.pi / 180#
'计算纬度1度对应的距离
Dim latPerM As Double
latPerM = 1# / 111000#
'计算经度1度对应的距离
Dim lonPerM As Double
lonPerM = 1# / (111000# * Cos(lat * WorksheetFunction.pi / 180#))
'计算距离对应的经度和纬度偏移
Dim latOffset As Double
Dim lonOffset As Double
latOffset = distance * Cos(radAngle) * latPerM
lonOffset = distance * Sin(radAngle) * lonPerM
'根据返回类型返回经度或者纬度
If returnType = 1 Then
CalcLatLonOffset = lon + lonOffset
ElseIf returnType = 2 Then
CalcLatLonOffset = lat + latOffset
Else
CalcLatLonOffset = 0#
End If
End Function
使用方法
按alt+F11(键盘上如果有FN键 ,还需要同时按FN)会打开VBE窗口,在窗口中点插入 - 模块。把下面的代码复制粘贴到右侧的空白区域中