如何用VB.NET将DMS转换为DD(坐标)
我现在正在努力在VB.NET中将DMS转换为DD&在无休止地搜索之后&没有运气我打开了这个Q,希望其他用户遇到这个问题并希望在过去解决它 我正在尝试将N51°4.212',E0°12.905'的DMS转换为DD 阅读此问题和答案后: 我有这个函数,它抛出了完全不正确的DD坐标(50.9298,-0.21508333): &然后阅读本页: 这让我想到了这个功能:如何用VB.NET将DMS转换为DD(坐标),vb.net,coordinates,geography,Vb.net,Coordinates,Geography,我现在正在努力在VB.NET中将DMS转换为DD&在无休止地搜索之后&没有运气我打开了这个Q,希望其他用户遇到这个问题并希望在过去解决它 我正在尝试将N51°4.212',E0°12.905'的DMS转换为DD 阅读此问题和答案后: 我有这个函数,它抛出了完全不正确的DD坐标(50.9298,-0.21508333): &然后阅读本页: 这让我想到了这个功能: Private Function DMS_To_DD(ByVal Degrees As String, ByVal Mins As S
Private Function DMS_To_DD(ByVal Degrees As String, ByVal Mins As String, ByVal Secs As String) As String
Dim TotalSecs As Integer = CInt(Mins) * 60 + Secs
Dim Total_2 As Double = TotalSecs / 3600
Dim X1 As String = CStr(CInt(Degrees) & CStr(Total_2))
If X1.StartsWith("-") Then
Return X1.Substring(0, 3) & X1.Substring(4, 5)
Else
Return X1.Substring(0, 2) & X1.Substring(3, 5)
End If
End Function
返回的坐标无效:51.12550045138
使用以下命令调用这两个函数:
DMS_至_DD(51、4212)
DMS_至_DD(0、12、905)
你知道我哪里做错了吗?这个问题快把我逼疯了 第一个函数使用了一个完全错误的公式。而第二个函数则要求整数分钟,或者换句话说,将十进制分钟数转换为整数 两个函数都被调用:DMS_To_DD(51,4212)DMS_To_DD(0,12905) 此外,您对坐标值表示的理解是错误的。N51°4.212'不等于51度4分212秒。E0°12.905’0度12分905秒的情况也是如此 更新 抱歉,上一个函数仅适用于+ve度。我已经更改了公式,以适当地处理DMS值的NSWE,代价是在函数中增加一个参数
NSWE
,以确定返回的十进制度数的符号。试试这个:
Private Function DMS_To_DD(nswe As String, ByVal deg As UInteger, ByVal min As Double, ByVal sec As Double) As Double
' throw exception if min and/or sec are negative values
If min < 0 Or sec < 0 Then
Throw New ArgumentOutOfRangeException("min and/or sec", "Argument must be a positive value.")
End If
Dim sign As Integer
' nswe checking below only considers 's' or 'w' value
' in order to determine -ve degrees.
' 'n', 'e' or any invalid string will be default to +ve degrees.
Select Case nswe.ToUpper
Case "S", "W" : sign = -1
Case Else : sign = 1
End Select
Return sign * (deg + (min * 60 + sec) / 3600)
End Function
要转换W4°44.362':
DMS_To_DD("W", 4, 44.362, 0) ' returns -4.73936666666667
希望这能有所帮助。谢谢,这很有效,但在类似这样的事情上失败了:N54°6.581',W4°43.638'-将我带到海里!知道为什么会发生这种情况吗?还有,刚刚看到你的修正案,如果这些不是度,分,秒(E0°12.905')。我如何将这个特定的格式转换为DD?如果我没有意义,我的意思是,例如,你是如何从51,4.212西经度和南纬度得到51,4,12.72度的。所以你必须通过-5个学位。例如:对于W4°43.638'-->
DMS_To_DD(-4,43.638,0)
.N51°4.212'表示度=51,分=4.212。0.212分等于12.72秒。所以4.212分钟等于4分12.72秒。更简单的例子是5.5分钟。小数部分(0.5)是半分钟,因此表示为分和秒,等于5分30秒。1分钟=60秒。0.5分钟=30秒。0.25分钟=15秒。
DMS_To_DD("N", 54, 6.279, 0) ' returns 54.10465
DMS_To_DD("W", 4, 44.362, 0) ' returns -4.73936666666667