| /* |
| * To change this template, choose Tools | Templates |
| * and open the template in the editor. |
| */ |
| package jme3tools.navigation; |
| |
| /** |
| * This class represents the position of an entity in the world. |
| * |
| * @author Benjamin Jakobus (based on JMarine by Cormac Gebruers and Benjamin Jakobus) |
| * @version 1.0 |
| * @since 1.0 |
| */ |
| public class Position { |
| |
| /* the latitude (+ N/E) */ |
| private Coordinate lat; |
| |
| /* the longitude (-W/S) */ |
| private Coordinate lng; |
| |
| /* An optional time to associate with this position - for historical tracking */ |
| private String utcTimeStamp; |
| |
| /* Degree position */ |
| private double degree; |
| |
| /** |
| * A new position expressed in decimal format |
| * @param dblLat |
| * @param dblLng |
| * @since 1.0 |
| */ |
| public Position(double dblLat, double dblLng) throws InvalidPositionException { |
| lat = new Coordinate(dblLat, Coordinate.LAT); |
| lng = new Coordinate(dblLng, Coordinate.LNG); |
| } |
| |
| /** |
| * A new position expressed in decimal format and degrees |
| * @param dblLat |
| * @param dblLng |
| * @param degree |
| * @since 1.0 |
| */ |
| // public Position(double dblLat, double dblLng, double degree) throws InvalidPositionException { |
| // lat = new Coordinate(dblLat, Coordinate.LAT); |
| // lng = new Coordinate(dblLng, Coordinate.LNG); |
| // this.degree = degree; |
| // } |
| /** |
| * A new position expressed in DegMin format |
| * @param latDeg |
| * @param latMin |
| * @param lngDeg |
| * @param lngMin |
| * @since 1.0 |
| */ |
| public Position(int latDeg, float latMin, int latQuad, int lngDeg, |
| float lngMin, int lngQuad) throws InvalidPositionException { |
| lat = new Coordinate(latDeg, latMin, Coordinate.LAT, latQuad); |
| lng = new Coordinate(lngDeg, lngMin, Coordinate.LNG, lngQuad); |
| } |
| |
| /** |
| * A new position expressed in ALRS format |
| * @param lat |
| * @param lng |
| * @since 1.0 |
| */ |
| public Position(String lat, String lng) throws InvalidPositionException { |
| this.lat = new Coordinate(lat); |
| this.lng = new Coordinate(lng); |
| } |
| |
| /** |
| * A new position expressed in NMEA GPS message format: |
| * 4807.038,N,01131.000,E |
| * @param |
| * @param |
| * @param |
| * @param |
| * @since 12.0 |
| */ |
| public Position(String latNMEAGPS, String latQuad, String lngNMEAGPS, String lngQuad, String utcTimeStamp) { |
| int quad; |
| |
| //LAT |
| if (latQuad.compareTo("N") == 0) { |
| quad = Coordinate.N; |
| } else { |
| quad = Coordinate.S; |
| } |
| try { |
| this.lat = new Coordinate(Integer.valueOf(latNMEAGPS.substring(0, 2)), Float.valueOf(latNMEAGPS.substring(2)), Coordinate.LAT, quad); |
| } catch (InvalidPositionException e) { |
| e.printStackTrace(); |
| } |
| |
| //LNG |
| if (lngQuad.compareTo("E") == 0) { |
| quad = Coordinate.E; |
| } else { |
| quad = Coordinate.W; |
| } |
| try { |
| this.lng = new Coordinate(Integer.valueOf(lngNMEAGPS.substring(0, 3)), Float.valueOf(lngNMEAGPS.substring(3)), Coordinate.LNG, quad); |
| } catch (InvalidPositionException e) { |
| e.printStackTrace(); |
| } |
| |
| //TIMESTAMP |
| this.associateUTCTime(utcTimeStamp); |
| } |
| |
| /** |
| * Add a reference time for this position - useful for historical tracking |
| * @param data |
| * @since 1.0 |
| */ |
| public void associateUTCTime(String data) { |
| utcTimeStamp = data; |
| } |
| |
| /** |
| * Returns the UTC time stamp |
| * @return str the UTC timestamp |
| * @since 1.0 |
| */ |
| public String utcTimeStamp() { |
| return utcTimeStamp; |
| } |
| |
| /** |
| * Prints out position using decimal format |
| * @return the position in decimal format |
| */ |
| public String toStringDec() { |
| return lat.toStringDec() + " " + lng.toStringDec(); |
| } |
| |
| /** |
| * Return the position latitude in decimal format |
| * @return the latitude in decimal format |
| * @since 1.0 |
| */ |
| public double getLatitude() { |
| return lat.decVal(); |
| } |
| |
| /** |
| * Returns the degree of the entity |
| * @return degree |
| * @since 1.0 |
| */ |
| // public double getDegree() { |
| // return degree; |
| // } |
| /** |
| * Return the position longitude in decimal format |
| * @return the longitude in decimal format |
| * @since 1.0 |
| */ |
| public double getLongitude() { |
| return lng.decVal(); |
| } |
| |
| /** |
| * Prints out position using DegMin format |
| * @return the position in DegMin Format |
| * @since 1.0 |
| */ |
| public String toStringDegMin() { |
| String output = ""; |
| output += lat.toStringDegMin(); |
| output += " " + lng.toStringDegMin(); |
| return output; |
| } |
| |
| /** |
| * Prints out the position latitude |
| * @return the latitude as a string for display purposes |
| * @since 1.0 |
| */ |
| public String toStringDegMinLat() { |
| return lat.toStringDegMin(); |
| } |
| |
| /** |
| * Prints out the position longitude |
| * @return the longitude as a string for display purposes |
| * @since 1.0 |
| */ |
| public String toStringDegMinLng() { |
| return lng.toStringDegMin(); |
| } |
| |
| /** |
| * Prints out the position latitude |
| * @return the latitude as a string for display purposes |
| * @since 1.0 |
| */ |
| public String toStringDecLat() { |
| return lat.toStringDec(); |
| } |
| |
| /** |
| * Prints out the position longitude |
| * @return the longitude as a string for display purposes |
| * @since 1.0 |
| */ |
| public String toStringDecLng() { |
| return lng.toStringDec(); |
| } |
| |
| //TEST HARNESS - DO NOT DELETE! |
| public static void main(String[] argsc) { |
| |
| //NMEA GPS Position format: |
| Position p = new Position("4807.038", "N", "01131.000", "W", "123519"); |
| System.out.println(p.toStringDegMinLat()); |
| System.out.println(p.getLatitude()); |
| System.out.println(p.getLongitude()); |
| System.out.println(p.toStringDegMinLng()); |
| System.out.println(p.utcTimeStamp()); |
| |
| }//main |
| } |