一般GPS/北斗数据解析都是基于C语言程序的,这里给出JAVA版本的实现供同学们参考。
先定义一个数据类
class GPSdata {
float latitude; // + East, - West
float longitude; // + North, - South
float altitude; // height
float speed; // speed
int time; // hhmmss
int date; // ddmmyy
}
private GPSdata mGPSdata;
1.解析GNRMC数据,一般双模为GNRMC,单模为GPRMC
private void getGnrmcValue(String rmcString) {
String[] str = rmcString.split(",");
if (str[1] == null || !isFloat(str[3]) || !isFloat(str[5])) {
Log.i(TAG, "GNRMC data invalid");
return;
}
if (str[1].indexOf(".") > 0) {
mGPSdata.time = Math.round(Float.valueOf(str[1]));// hhmmss
}
if (str[3].indexOf(".") > 0) {
mGPSdata.latitude = Float.valueOf(str[5]);// 纬度
if(mGPSdata.latitude<-90 || mGPSdata.latitude>90){
mGPSdata.latitude = 0;
}
ydu = (int) mGPSdata.latitude / 100;
yfen = (float) mGPSdata.latitude - ydu * 100;
if (str[5] == "W")// 默认东经,西经-
ydu *= -1;
}
if (str[5].indexOf(".") > 0) {
mGPSdata.longitude = Float.valueOf(str[3]);// 经度
if(mGPSdata.longitude<-180 || mGPSdata.longitude>180){
mGPSdata.longitude = 0;
}
xdu = (int) mGPSdata.longitude / 100;
xfen = (float) mGPSdata.longitude - xdu * 100;
if (str[4] == "S")// 默认北纬,南纬-
xdu *= -1;
}
mGPSdata.date = Math.round(Float.valueOf(str[9]));// ddmmyy
}
2.解析GNGGA数据
private void getGnggaValue(String ggaString) {
String[] str = ggaString.split(",");
if (str[2] == null || !isFloat(str[2]) || !isFloat(str[4])
|| !isFloat(str[9])) {
Log.i(TAG, "GNGGA data invalid");
return;
}
if (str[9].indexOf(".") > 0) {
mGPSdata.altitude = Float.valueOf(str[9]);// 高程
}
if(mGPSdata.altitude>9999.9 || mGPSdata.altitude<-9999.9){
mGPSdata.altitude = 0;// 无效值
}
}