通常,我在我的应用上使用 14. some number 和 121.some numbers 作为地图坐标。
当我正在开发一个发送不同gps日志的新模块时,我得到了这个坐标:
1434.7906
12103.5434
起初我认为我的应用程序没有路由,但后来我看到给定的坐标是关闭的,或者是直接的,格式错误(小数位移到右边两次)。模块有问题吗?或者是否有将其转换为法线坐标的公式?
编辑更新:我发现以上格式是14D 34M 7906S - (从以下链接获取)
最终,给了我一个问题。 更改了标题
如何将其转换为十进制表格?
12103怎么样?我需要它是121和03 - 需要在3个字符之后拆分。因此我无法控制字符串的爆发。需要帮忙!谢谢
在一天结束时,我需要将上面的2个转换为:
14.5798433°, 121.0590567°
Calc Source
答案 0 :(得分:2)
假设你有前导零(世界其他地方的事情),经度总是3位数(0-180),纬度是2位数(0-90)。
符号只有在度数+小数分钟时才有意义,即
1434.7906 = 14° + 34.79060' = 14 + (34.79060 / 60) °
在C#中,未经测试:
string lat = ..., lon = ...;
double la = double.Parse(lat.Substring(0, 2)) + double.Parse(lat.Substring(2)) / 60.0;
double lo = double.Parse(lon.Substring(0, 3)) + double.Parse(lon.Substring(3)) / 60.0;
答案 1 :(得分:1)
我不熟悉坐标,但它看起来像你的值之前的第一个必须是5位数,第二个值是4位数。所以我会首先分析句号(句号)。然后,如果第一个值是4位数填充到5,通过在前面放置0。然后分开位置,这样你就有了014和34,然后就变成了14和34等等。
答案 2 :(得分:0)
通过shell分割数字
$ echo 1434 |sed 's/\(..\)$/ \1/'
14 34
$ echo 12103 |sed 's/\(..\)$/ \1/'
121 03
如果您需要使用期望输出来处理整数:
$ echo 1434.7906 |sed -r 's/(.*)(..)\.(.*)/\1Degress, \2Minutes \3Seconds/'
14Degress, 34Minutes 7906Seconds
答案 3 :(得分:0)
请注意,经度和纬度可以是负数。这是一个在类型转换中混乱的函数:
Function DecDegree(dd_mm_decmm As String) As String
Dim deg As String = dd_mm_decmm.Substring(0, dd_mm_decmm.IndexOf(".") - 2)
Dim mm_dec As String = dd_mm_decmm.Substring(dd_mm_decmm.IndexOf(".") - 2)
Dim decDegrees As Double = CDbl(deg) + (CDbl(mm_dec / 60) * If(CDbl(deg) < 0, -1, 1))
Return FormatNumber(decDegrees, 6)
End Function
拆分基于小数点的位置。分钟转换的数学运算检查是否需要加或减。 func返回6个小数点,这对于除了测量级GPS之外的任何小数都是足够的。