把gps接收器的原始数据处理为经纬度及高度的具体坐标,用C#实现,求代码,求帮助,谢谢啦
发布网友
发布时间:2022-04-23 02:26
我来回答
共1个回答
热心网友
时间:2023-10-11 16:50
int GPS_RMC_Parse(char *line, GPS_INFO *GPS)
{
unsigned char ch, status, tmp;
float lati_cent_tmp, lati_second_tmp;
float long_cent_tmp, long_second_tmp;
float speed_tmp;
char *buf = line; /// 得到缓存
ch = buf[5];
status = buf[GetComma(2, buf)];
if (ch == 'C') /// 如果第五个字符是C,($GPRMC)
{
if (status == 'A') /// 如果数据有效,则分析已经定位
{
GPS -> NS = buf[GetComma(4, buf)];
GPS -> EW = buf[GetComma(6, buf)];
GPS->latitude = Get_Double_Number(&buf[GetComma(3, buf)]);
GPS->longitude = Get_Double_Number(&buf[GetComma( 5, buf)]);
GPS->latitude_Degree = (int)GPS->latitude / 100; /// 分离纬度
lati_cent_tmp = (GPS->latitude - GPS->latitude_Degree * 100);
GPS->latitude_Cent = (int)lati_cent_tmp;
lati_second_tmp = (lati_cent_tmp - GPS->latitude_Cent) * 60;
GPS->latitude_Second = (int)lati_second_tmp;
GPS->longitude_Degree = (int)GPS->longitude / 100; /// 分离经度
long_cent_tmp = (GPS->longitude - GPS->longitude_Degree * 100);
GPS->longitude_Cent = (int)long_cent_tmp;
long_second_tmp = (long_cent_tmp - GPS->longitude_Cent) * 60;
GPS->longitude_Second = (int)long_second_tmp;
speed_tmp = Get_Float_Number(&buf[GetComma(7, buf)]); /// 速度(单位:海里/时)
GPS->speed = speed_tmp * 1.85; /// 1海里=1.85公里
GPS->direction = Get_Float_Number(&buf[GetComma(8, buf)]); /// 角度
GPS->D.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); /// 时间
GPS->D.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
GPS->D.second = (buf[11] - '0') * 10 + (buf[12] - '0');
tmp = GetComma(9, buf);
GPS->D.day = (buf[tmp + 0] - '0') * 10 + (buf[tmp + 1] - '0'); //日期
GPS->D.month = (buf[tmp + 2] - '0') * 10 + (buf[tmp + 3] - '0');
GPS->D.year = (buf[tmp + 4] - '0') * 10 + (buf[tmp + 5] - '0')+2000;
UTC2BTC(&GPS->D);
return 1;
}
}
return 0;
}