Class Position


  • public class Position
    extends java.lang.Object
    Position represents a geographic location, based on the WGS84 System (World Geodetic System 1984).

    The org.osgi.util.measurement.Measurement class is used to represent the values that make up a position.

    A given position object may lack any of it's components, i.e. the altitude may not be known. Such missing values will be represented by null.

    Position does not override the implementation of either equals() or hashCode() because it is not clear how missing values should be handled. It is up to the user of a position to determine how best to compare two position objects. A Position object is immutable.

    • Constructor Detail

      • Position

        public Position​(Measurement lat,
                        Measurement lon,
                        Measurement alt,
                        Measurement speed,
                        Measurement track)
        Constructs a Position object with the given values.
        Parameters:
        lat - a Measurement object specifying the latitude in radians, or null
        lon - a Measurement object specifying the longitude in radians, or null
        alt - a Measurement object specifying the altitude in meters, or null
        speed - a Measurement object specifying the speed in meters per second, or null
        track - a Measurement object specifying the track in radians, or null
    • Method Detail

      • getAltitude

        public Measurement getAltitude()
        Returns the altitude of this position in meters.
        Returns:
        a Measurement object in Unit.m representing the altitude in meters above the ellipsoid null if the altitude is not known.
      • getLongitude

        public Measurement getLongitude()
        Returns the longitude of this position in radians.
        Returns:
        a Measurement object in Unit.rad representing the longitude, or null if the longitude is not known.
      • getLatitude

        public Measurement getLatitude()
        Returns the latitude of this position in radians.
        Returns:
        a Measurement object in Unit.rad representing the latitude, or null if the latitude is not known..
      • getSpeed

        public Measurement getSpeed()
        Returns the ground speed of this position in meters per second.
        Returns:
        a Measurement object in Unit.m_s representing the speed, or null if the speed is not known..
      • getTrack

        public Measurement getTrack()
        Returns the track of this position in radians as a compass heading. The track is the extrapolation of previous previously measured positions to a future position.
        Returns:
        a Measurement object in Unit.rad representing the track, or null if the track is not known..
      • normalize

        private static double normalize​(double value,
                                        double range)
        This function normalizes the a value according to a range. This is not simple modulo (as I thought when I started), but requires some special handling. For positive numbers we subtract 2*range from the number so that end up between -/+ range. For negative numbers we add this value. For example, if the value is 270 and the range is +/- 180. Then sign=1 so the (int) factor becomes 270+180/360 = 1. This means that 270-360=-90 is the result. (degrees are only used to make it easier to understand, this function is agnostic for radians/degrees). The result will be in [range,range> The algorithm is not very fast, but it handling the [> ranges made it very messy using integer arithmetic, and this is very readable. Note that it is highly unlikely that this method is called in normal situations. Normally input values to position are already normalized because they come from a GPS. And this is much more readable.
        Parameters:
        value - The value that needs adjusting
        range - -range = < value < range