Class Position


  • public class Position
    extends java.lang.Object
    Can use commons-math3 FastMath for most trig functions exception for atan,atan2 (see here).
    Author:
    dxm
    • Constructor Detail

      • Position

        public Position​(double lat,
                        double lon)
        Parameters:
        lat - in degrees
        lon - in degrees
      • Position

        public Position​(double lat,
                        double lon,
                        double alt)
        Parameters:
        lat - in degrees
        lon - in degrees
        alt - in metres
    • Method Detail

      • create

        public static Position create​(double lat,
                                      double lon)
      • create

        public static Position create​(double lat,
                                      double lon,
                                      double alt)
      • getLat

        public final double getLat()
      • getLon

        public final double getLon()
      • getAlt

        public final double getAlt()
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • predict

        public final Position predict​(double distanceKm,
                                      double courseDegrees)
        Predicts position travelling along a great circle arc based on the Haversine formula. From http://www.movable-type.co.uk/scripts/latlong.html
        Parameters:
        distanceKm -
        courseDegrees -
        Returns:
      • toDegrees

        public static double toDegrees​(double degrees,
                                       double minutes,
                                       double seconds)
      • getLatitudeOnGreatCircle

        public java.lang.Double getLatitudeOnGreatCircle​(Position position,
                                                         double longitudeDegrees)
        From http://williams.best.vwh.net/avform.htm (Latitude of point on GC).
        Parameters:
        position -
        longitudeDegrees -
        Returns:
      • getLongitudeOnGreatCircle

        public Position.LongitudePair getLongitudeOnGreatCircle​(Position position,
                                                                double latitudeDegrees)
        Returns null if no crossing of latitude otherwise return two longitude candidates. From http://williams.best.vwh.net/avform.htm (Crossing parallels).
        Parameters:
        position -
        latitudeDegrees -
        Returns:
      • getEarthLimb

        public final Position[] getEarthLimb​(int radials)
        Return an array of Positions representing the earths limb (aka: horizon) as viewed from this Position in space. This position must have altitude > 0 The array returned will have the specified number of elements (radials). This method is useful for the calculation of satellite footprints or the position of the Earth's day/night terminator. This formula from Aviation Formula by Ed Williams (http://williams.best.vwh.net/avform.htm)
        Parameters:
        radials - the number of radials to calculated (evenly spaced around the circumference of the circle
        Returns:
        An array of radial points a fixed distance from this point representing the Earth's limb as viewed from this point in space.
      • getDistanceToKm

        public final double getDistanceToKm​(Position position)
        returns distance between two WGS84 positions according to Vincenty's formula from Wikipedia
        Parameters:
        position -
        Returns:
      • getBearingDegrees

        public final double getBearingDegrees​(Position position)
        Returns a great circle bearing in degrees in the range 0 to 360.
        Parameters:
        position -
        Returns:
      • getBearingDifferenceDegrees

        public static double getBearingDifferenceDegrees​(double bearing1,
                                                         double bearing2)
        returns difference in degrees in the range -180 to 180
        Parameters:
        bearing1 - degrees between -360 and 360
        bearing2 - degrees between -360 and 360
        Returns:
      • getDistanceKmToPath

        public final double getDistanceKmToPath​(Position p1,
                                                Position p2)
        calculates the distance of a point to the great circle path between p1 and p2. Formula from: http://www.movable-type.co.uk/scripts/latlong.html
        Parameters:
        p1 -
        p2 -
        Returns:
      • toDegreesMinutesDecimalMinutesLatitude

        public static java.lang.String toDegreesMinutesDecimalMinutesLatitude​(double lat)
      • toDegreesMinutesDecimalMinutesLongitude

        public static java.lang.String toDegreesMinutesDecimalMinutesLongitude​(double lon)
      • assertWithMsg

        public static void assertWithMsg​(boolean assertion,
                                         java.lang.String msg)
      • getPositionAlongPath

        public final Position getPositionAlongPath​(Position position,
                                                   double proportion)
        Returns a position along a path according to the proportion value
        Parameters:
        position -
        proportion - is between 0 and 1 inclusive
        Returns:
      • getPositionsAlongPath

        public final java.util.List<Position> getPositionsAlongPath​(Position position,
                                                                    double maxSegmentLengthKm)
      • ensureContinuous

        public final Position ensureContinuous​(Position lastPosition)
        normalize the lat lon values of this to ensure that no large longitude jumps are made from lastPosition (e.g. 179 to -180)
        Parameters:
        lastPosition -
      • isWithin

        public final boolean isWithin​(java.util.List<Position> positions)
      • equals

        public final boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • getDistanceToPathKm

        public final double getDistanceToPathKm​(java.util.List<Position> positions)
      • getDistanceToSegmentKm

        public final double getDistanceToSegmentKm​(Position p1,
                                                   Position p2)
      • getClosestIntersectionWithSegment

        public final Position getClosestIntersectionWithSegment​(Position p1,
                                                                Position p2)
      • isOutside

        public boolean isOutside​(java.util.List<Position> path,
                                 double minDistanceKm)
        Parameters:
        path -
        minDistanceKm -
        Returns:
      • longitudeDiff

        public static double longitudeDiff​(double a,
                                           double b)
        Returns the difference between two longitude values. The returned value is always >=0.
        Parameters:
        a -
        b -
        Returns:
      • to180

        public static double to180​(double d)
        Converts an angle in degrees to range -180< x <= 180.
        Parameters:
        d -
        Returns:
      • normalizeLongitude

        public Position normalizeLongitude()