将度分秒转换为十进制 LatLng

Convert DegreesMinutesSeconds to Decimal LatLng

正在尝试编写一个 vbscript 函数将 DMS 中的坐标转换为十进制格式。

38°37'16.662"N, 109°36'5.01"W 应转换为 38.621295,-109.601391666667

使用下面的函数,我得到了正确的数字,但我不知道如何确定是否将负号放在 lng 之前。

latLngDmsToDecimal(38, 37, 16.662) = 38.621295
latLngDmsToDecimal(109, 36, 5.01) = 109.601391666667

请注意,第二个结果中没有负号。

Function latLngDmsToDecimal(byVal d, byVal m, byVal s)
    d = cDbl(d)
    m = cDbl(m)
    s = cDbl(s)

    If d < 0 Then 
        latLngDmsToDecimal = -(s / 3600) - (m / 60) + d
    Else
        latLngDmsToDecimal = (s / 3600) + (m / 60) + d
    End If
End Function

您需要解析方向。 W 和 S 应该是负数。要么这应该传递到你的函数中,解析器应该反转度数部分

所以第二个应该读作

latLngDmsToDecimal(109, 36, 5.01, W) = -109.601391666667

latLngDmsToDecimal(-109, 36, 5.01) = -109.601391666667