GPS/北斗数据解析之JAVA实现

一般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;// 无效值
		}
	}

你可能感兴趣的:(java,嵌入式)