nmea
No notes
Syntax:
Java
package gpsdata; import java.text.NumberFormat; /** * * @author Andrea * */ public class DmsCoord { final static String NMEA_NORTH = "N"; final static String NMEA_WEST = "W"; final static String NMEA_EAST = "E"; final static String NMEA_SOUTH = "S"; final static String NMEA_SEP = ","; int deg, min; double sec; public DmsCoord(int deg, int min, double sec) { super(); this.deg = deg; this.min = min; this.sec = sec; } public DmsCoord() { // TODO Auto-generated constructor stub } public int getDegrees() { return deg; } public void setDegrees(int deg) { this.deg = deg; } public int getMin() { return min; } public void setMin(int min) { this.min = min; } public double getSec() { return sec; } public void setSec(double sec) { this.sec = sec; } /** * lat = ddmm.sssss * lon = dddmm.sssss * @param f * @param lat true = lat, false = lon * @return */ String getNMEAString( boolean lat ){ int deg = getDegrees(); if (deg<0) deg = -deg; String dir = null; String str = null; if (lat){ str = String.format("%02d", deg); } else { str = String.format("%03d", deg); } int mills = (int) ( (getSec()-(int)getSec())*1000); str += String.format("%02d.%02d%03d", getMin(), (int)getSec(), mills); if (lat){ assert( str.length() == 10 ); } else { assert( str.length() == 11 ); } if (lat){ // latitude dir = NMEA_NORTH; if (getDegrees() < 0){ dir = NMEA_SOUTH; } } else { // longitude dir = NMEA_EAST; if (getDegrees() < 0){ dir = NMEA_WEST; } } str += DmsCoord.NMEA_SEP + dir; return str; } /** * * @return */ public double getDecDeg(){ int degInt = getDegrees(); if (degInt<0) degInt = -degInt; double frac = ((double)getMin()/60) + (getSec()/3600); double dec = getDegrees(); if (getDegrees()<0) dec -= frac; else dec += frac; return dec; } /** * * @param dec */ public void setDecDeg( double dec ){ int deg = (int)dec; double posDec = dec; if (dec<0) posDec = -posDec; double decPart = posDec - (int)posDec; int min = (int)(decPart * 60); decPart -= (double)min / 60; double sec = decPart * 60 * 60; this.deg = deg; this.min = min; this.sec = sec; } /** * * @param nmea */ void setNMEAString( String nmeaCoords, String nmeaDirection ){ if ( NMEA_NORTH.equalsIgnoreCase(nmeaDirection)|| NMEA_SOUTH.equalsIgnoreCase(nmeaDirection) ) { // lat setNMEACoord( nmeaCoords, true ); if (NMEA_SOUTH.equalsIgnoreCase(nmeaDirection)) setDegrees( -getDegrees() ); } else if ( NMEA_WEST.equalsIgnoreCase(nmeaDirection)|| NMEA_EAST.equalsIgnoreCase(nmeaDirection) ) { // lon setNMEACoord( nmeaCoords, false ); if (NMEA_WEST.equalsIgnoreCase(nmeaDirection)) setDegrees( -getDegrees() ); } else assert(false); } /** * * @param nmeaCoord * @param lat */ private void setNMEACoord( String nmeaCoord, boolean lat ){ String [] strArr = nmeaCoord.split("\\."); String degreeStr = null, minStr = null; if (lat){ assert( strArr[0].length() == 4 ); degreeStr = strArr[0].substring(0, 2); minStr = strArr[0].substring(2, 4); } else { assert( strArr[0].length() == 5 ); degreeStr = strArr[0].substring(0, 3); minStr = strArr[0].substring(3, 5); } String secStr = strArr[1]; int deg = Integer.parseInt(degreeStr); int min = Integer.parseInt(minStr); double sec = Double.parseDouble(secStr) / 1000; setDegrees(deg); setMin(min); setSec(sec); } }