……
楼上又说错了。
3337.3186的度分格式的意思是,如果是纬度,则是:DDMM.MMMM,如果是经度,则是DDDMM.MMMM
3337.3186就是33°37.3186'11900.4483,E119°00.4483'
如何分析?可以考虑用正则,正则可以用这个:
\$GPRMC,(?<time>\d+\.\d+),(?<datavalid>[AV]),(?<lat>(?<latD>\d{2})(?<latM>\d{2}\.\d+)),(?<latMask>[NS]),(?<lon>(?<lonD>\d{3})(?<lonM>\d{2}\.\d+)),(?<lonMask>[EW]),(?<speed>\d+(\.\d+)?),(?<track>\d+(\.\d+)?),(?<date>\d{6}),(?<magvar>\d+(\.\d+)?),[^,]*,(?<posType>[ADEMN])\*(?<checkSum>[a-fA-F0-9]{2})

解决方案 »

  1.   

    正则修改一下,刚才多了2个分组。结果没问题,不过这样更快。string strData = @"";
    string strP = @"\$GPRMC,(?<time>\d+\.\d+),(?<datavalid>[AV]),(?<lat>(?<latD>\d{2})(?<latM>\d{2}\.\d+)),(?<latMask>[NS]),(?<lon>(?<lonD>\d{3})(?<lonM>\d{2}\.\d+)),(?<lonMask>[EW]),(?<speed>\d+(?:\.\d+)?),(?<track>\d+(?:\.\d+)?),(?<date>\d{6}),(?<magvar>\d+(?:\.\d+)?),[^,]*,(?<posType>[ADEMN])\*(?<checkSum>[a-fA-F0-9]{2})";
    Match m = Regex.Match(strData,strP);
    if(m.Success)
    {
        MessageBox.Show(m.Group["lat"].Value);
        .....其他分组
    }
      

  2.   

    恩。启发。用GPRMC替代GPGGA。不错的选择。GGA里只有UTC时间,没日期的。