下面程序取出标准GPS传送数据里的:
Lat 度 和 分,南北, Lon 度 和 分,东西。
顺便取出 UTC 时分秒
#include <stdioh>
#include <mathh>
main(){
char gps_td[]="$GPRMC,081836,A,375165,S,1450736,E,0000,3600,130998,0113,E62";
char Lat[10],Lon[10];
double Lat_v,Lon_v;
char sn[2],ew[2];
int hh,mm,ss;
int i;
int Lat_deg,Lon_deg;
double Lat_mi,Lon_mi;
for (i=0;i<strlen(gps_td);i++) if (gps_td[i]==',')gps_td[i]=' ';
sscanf(gps_td,"%s %2d%2d%2d %s %s %s %s %s",&hh,&mm,&ss,Lat,sn,Lon,ew) ;
sscanf(Lat,"%lf",&Lat_v); sscanf(Lon,"%lf",&Lon_v);
Lat_deg = (int) Lat_v /100;
Lon_deg = (int) Lon_v /100;
Lat_mi = Lat_v - Lat_deg 100;
Lon_mi = Lon_v - Lon_deg 100;
printf("UTC Time: %02d:%02d:%02d\n",hh,mm,ss);
printf("Lat: %d deg %g fen %s\n",Lat_deg, Lat_mi, sn);
printf("Lon: %d deg %g fen %s\n",Lon_deg, Lon_mi, ew);
}
输出:
UTC Time: 08:18:36
Lat: 37 deg 5165 fen S
Lon: 145 deg 736 fen E
百度一下NMEA格式,就可以从NMA中成功的解析出你要的数据
推荐定位信息(GPRMC)
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>hh
<1> UTC时间,hhmmsssss(时分秒毫秒)格式
<2> 定位状态,A=有效定位,V=无效定位
<3> 纬度ddmmmmmm(度分)格式(前面的0也将被传输)
<4> 纬度半球N(北半球)或S(南半球)
<5> 经度dddmmmmmm(度分)格式(前面的0也将被传输)
<6> 经度半球E(东经)或W(西经)
<7> 地面速率(0000~9999节,前面的0也将被传输)
<8> 地面航向(0000~3599度,以正北为参考基准,前面的0也将被传输)
<9> UTC日期,ddmmyy(日月年)格式
<10> 磁偏角(0000~1800度,前面的0也将被传输)
<11> 磁偏角方向,E(东)或W(西)
<12> 模式指示(仅NMEA0183 300版本输出,A=自主定位,D=差分,E=估算,N=数据无效)
后hh为$到所有字符的异或和
这是你能获取到的全部信息,自己去解析。
jclass GpsInfoClass = env->FindClass("com/parser/GPSINFO");
jfieldID ID_bValid = env->GetFieldID(GpsInfoClass,"bValid","I");
jfieldID ID_bSpeed = env->GetFieldID(GpsInfoClass,"bSpeed","I");
env->SetIntField(_obj,ID_bValid,(jint)infobValid);
env->SetIntField(_obj,ID_bSpeed,(jint)infobSpeed);
return _obj;
以上就可以了。但是不知道你的BYTE是自定义的什么类型,如果是char之类的,就另外想办法转换成jint。其中 _obj 变量是public native GPSINFO getGpsInfo();这个本地方法在C代码中的参数:JNIEXPORT jobject JNICALL Java_com_parser_GPSINFO_ getGpsInfo(JNIEnv env, jobject _obj)
以上就是关于GPRMC信息中的精纬度读取全部的内容,包括:GPRMC信息中的精纬度读取、如何从GPRMC格式的数据中获取GPS终端的行进方向、我现在在做Android,用到了JNI,写了一个C程序,返回的是个结构体,在Android如何获取C程序返回的结构体呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)