Package org.osgi.util.position
Class Position
java.lang.Object
org.osgi.util.position.Position
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.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final Measurement
private static final double
private final Measurement
private static final double
private final Measurement
private final Measurement
private final Measurement
private static final double
-
Constructor Summary
ConstructorsConstructorDescriptionPosition
(Measurement lat, Measurement lon, Measurement alt, Measurement speed, Measurement track) Constructs aPosition
object with the given values. -
Method Summary
Modifier and TypeMethodDescriptionReturns the altitude of this position in meters.Returns the latitude of this position in radians.Returns the longitude of this position in radians.getSpeed()
Returns the ground speed of this position in meters per second.getTrack()
Returns the track of this position in radians as a compass heading.private static double
normalize
(double value, double range) This function normalizes the a value according to a range.
-
Field Details
-
altitude
-
longitude
-
latitude
-
speed
-
track
-
LON_RANGE
private static final double LON_RANGE- See Also:
-
LAT_RANGE
private static final double LAT_RANGE- See Also:
-
TRACK_RANGE
private static final double TRACK_RANGE- See Also:
-
-
Constructor Details
-
Position
public Position(Measurement lat, Measurement lon, Measurement alt, Measurement speed, Measurement track) Constructs aPosition
object with the given values.- Parameters:
lat
- aMeasurement
object specifying the latitude in radians, or nulllon
- aMeasurement
object specifying the longitude in radians, or nullalt
- aMeasurement
object specifying the altitude in meters, or nullspeed
- aMeasurement
object specifying the speed in meters per second, or nulltrack
- aMeasurement
object specifying the track in radians, or null
-
-
Method Details
-
getAltitude
Returns the altitude of this position in meters.- Returns:
- a
Measurement
object inUnit.m
representing the altitude in meters above the ellipsoidnull
if the altitude is not known.
-
getLongitude
Returns the longitude of this position in radians.- Returns:
- a
Measurement
object inUnit.rad
representing the longitude, ornull
if the longitude is not known.
-
getLatitude
Returns the latitude of this position in radians.- Returns:
- a
Measurement
object inUnit.rad
representing the latitude, ornull
if the latitude is not known..
-
getSpeed
Returns the ground speed of this position in meters per second.- Returns:
- a
Measurement
object inUnit.m_s
representing the speed, ornull
if the speed is not known..
-
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 inUnit.rad
representing the track, ornull
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 adjustingrange
- -range = invalid input: '<' value invalid input: '<' range
-