拆分字符串没有拆分器

时间:2014-01-07 09:17:59

标签: .net vb.net string coordinates latitude-longitude

通常,我在我的应用上使用 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

enter image description here

4 个答案:

答案 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之外的任何小数都是足够的。