平面曲线要素计算
方位角计算
由于测绘坐标系和数学坐标系之间不同,测绘坐标系中XY方向颠倒,但是旋转方向并没有发生变化,该计算流程比较简单,就是通常使用的actan,但是因为四个象限的原因,所以每次单独计算非常复杂,所以自己写了一个excel函数进行解算。
计算原理
如图所示,测绘中方位角X从北方向开始
存在1和2两个点,其中1是起点,2是终点,现在计算从1到2的方位角,其思路是先计算1到2的坐标差值比的反正切;然后根据delt的正负计算象限,再反算对应方位角。
[
Δ
X
=
x
2
−
x
1
]
[ \Delta X = x_2 - x_1 ]
[ΔX=x2−x1]
[
Δ
Y
=
y
2
−
y
1
]
[ \Delta Y = y_2 - y_1 ]
[ΔY=y2−y1]
[
R
=
arctan
(
∣
Δ
Y
∣
∣
Δ
X
∣
)
]
[ R = \arctan\left(\frac{| \Delta Y |}{| \Delta X |}\right) ]
[R=arctan(∣ΔX∣∣ΔY∣)]
根据ΔX和ΔY判断象限,并计算方位角
ΔX | ΔY | 象限 | 坐标方位角 |
---|---|---|---|
+ | + | I | R |
- | + | II | 180-R |
- | - | III | 180+R |
+ | - | IV | 360-R |
EXCEL中VBA实现
平时使用excel计算经常是使用手敲公式,然后向下填充实现,但是对于复杂计算并不方便,可以使用EXCEl中自带的VBA进行实现
添加VBA
再excel中自带VBA,需要手动开启:
“文件”->“选项”->“自定义功能区”,主选项卡下“开发工具”前面打勾
开启VBA
菜单栏 -> 开发工具 -> Visual Basic
编程
菜单栏“插入”->“模块”,然后在代码窗口中编写代码
方位角求解
Function CalculateAngle(x1, y1, x2, y2)
' 计算x和y方向上的差值
deltaX = x2 - x1
deltaY = y2 - y1
' 使用反正切函数计算方位角(以弧度为单位)
R = Atn(Abs(deltaY / deltaX))
' 正负值计算象限
If deltaX > 0 And deltaY > 0 Then
R = R
End If
If deltaX < 0 And deltaY > 0 Then
R = WorksheetFunction.Pi - R
End If
If deltaX < 0 And deltaY < 0 Then
R = WorksheetFunction.Pi + R
End If
If deltaX > 0 And deltaY < 0 Then
R = 2 * WorksheetFunction.Pi - R
End If
CalculateAngle = R * 180 / WorksheetFunction.Pi
End Function
代码比较简单,优化if的事就不在这里说了。