Package au.gov.amsa.util.navigation
Class Position
- java.lang.Object
-
- au.gov.amsa.util.navigation.Position
-
public class Position extends java.lang.ObjectCan use commons-math3 FastMath for most trig functions exception for atan,atan2 (see here).- Author:
- dxm
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPosition.LongitudePair
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static voidassertWithMsg(boolean assertion, java.lang.String msg)static Positioncreate(double lat, double lon)static Positioncreate(double lat, double lon, double alt)PositionensureContinuous(Position lastPosition)normalize the lat lon values of this to ensure that no large longitude jumps are made from lastPosition (e.g.booleanequals(java.lang.Object o)doublegetAlt()doublegetBearingDegrees(Position position)Returns a great circle bearing in degrees in the range 0 to 360.static doublegetBearingDifferenceDegrees(double bearing1, double bearing2)returns difference in degrees in the range -180 to 180PositiongetClosestIntersectionWithSegment(Position p1, Position p2)doublegetDistanceKmToPath(Position p1, Position p2)calculates the distance of a point to the great circle path between p1 and p2.doublegetDistanceToKm(Position position)returns distance between two WGS84 positions according to Vincenty's formula from WikipediadoublegetDistanceToPathKm(java.util.List<Position> positions)doublegetDistanceToSegmentKm(Position p1, Position p2)Position[]getEarthLimb(int radials)Return an array of Positions representing the earths limb (aka: horizon) as viewed from this Position in space.doublegetLat()java.lang.DoublegetLatitudeOnGreatCircle(Position position, double longitudeDegrees)From http://williams.best.vwh.net/avform.htm (Latitude of point on GC).doublegetLon()Position.LongitudePairgetLongitudeOnGreatCircle(Position position, double latitudeDegrees)Returns null if no crossing of latitude otherwise return two longitude candidates.PositiongetPositionAlongPath(Position position, double proportion)Returns a position along a path according to the proportion valuejava.util.List<Position>getPositionsAlongPath(Position position, double maxSegmentLengthKm)inthashCode()booleanisOutside(java.util.List<Position> path, double minDistanceKm)booleanisWithin(java.util.List<Position> positions)static doublelongitudeDiff(double a, double b)Returns the difference between two longitude values.PositionnormalizeLongitude()Positionpredict(double distanceKm, double courseDegrees)Predicts position travelling along a great circle arc based on the Haversine formula.static doubleto180(double d)Converts an angle in degrees to range -180< x <= 180.Positionto360()static doubletoDegrees(double degrees, double minutes, double seconds)static java.lang.StringtoDegreesMinutesDecimalMinutesLatitude(double lat)static java.lang.StringtoDegreesMinutesDecimalMinutesLongitude(double lon)java.lang.StringtoString()
-
-
-
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:
toStringin classjava.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 360bearing2- 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)
-
to360
public final Position to360()
-
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:
equalsin classjava.lang.Object
-
hashCode
public final int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
getDistanceToPathKm
public final double getDistanceToPathKm(java.util.List<Position> positions)
-
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()
-
-