Class PlanetModel

  • All Implemented Interfaces:
    SerializableObject

    public class PlanetModel
    extends Object
    implements SerializableObject
    Holds mathematical constants associated with the model of a planet.
    WARNING: This API is experimental and might change in incompatible ways in the next release.
    • Field Detail

      • SPHERE

        public static final PlanetModel SPHERE
        Planet model corresponding to sphere.
      • WGS84

        public static final PlanetModel WGS84
        Planet model corresponding to WGS84 ellipsoid
      • CLARKE_1866

        public static final PlanetModel CLARKE_1866
        Planet model corresponding to Clarke 1866 ellipsoid
      • a

        public final double a
        Semi-major axis
      • b

        public final double b
        Semi-minor axis
      • xyScaling

        public final double xyScaling
        The x/y scaling factor
      • zScaling

        public final double zScaling
        The z scaling factor
      • inverseXYScaling

        public final double inverseXYScaling
        The inverse of xyScaling
      • inverseZScaling

        public final double inverseZScaling
        The inverse of zScaling
      • inverseXYScalingSquared

        public final double inverseXYScalingSquared
        The square of the inverse of xyScaling
      • inverseZScalingSquared

        public final double inverseZScalingSquared
        The square of the inverse of zScaling
      • scaledFlattening

        public final double scaledFlattening
        The scaled flattening value
      • squareRatio

        public final double squareRatio
        The square ratio
      • meanRadius

        public final double meanRadius
        The mean radius of the planet
      • scale

        public final double scale
        The scale of the planet
      • inverseScale

        public final double inverseScale
        The inverse of scale
      • NORTH_POLE

        public final GeoPoint NORTH_POLE
        North pole
      • SOUTH_POLE

        public final GeoPoint SOUTH_POLE
        South pole
      • MIN_X_POLE

        public final GeoPoint MIN_X_POLE
        Min X pole
      • MAX_X_POLE

        public final GeoPoint MAX_X_POLE
        Max X pole
      • MIN_Y_POLE

        public final GeoPoint MIN_Y_POLE
        Min Y pole
      • MAX_Y_POLE

        public final GeoPoint MAX_Y_POLE
        Max Y pole
      • minimumPoleDistance

        public final double minimumPoleDistance
        Minimum surface distance between poles
      • MAX_VALUE

        public final double MAX_VALUE
        maximum magnitude value for *this* planet model
      • DECODE

        public final double DECODE
        scalar value used to decode from integer back into double space
      • MAX_ENCODED_VALUE

        public final int MAX_ENCODED_VALUE
        Max encoded value
      • MIN_ENCODED_VALUE

        public final int MIN_ENCODED_VALUE
        Min encoded value
      • docValueEncoder

        public final PlanetModel.DocValueEncoder docValueEncoder
        utility class used to encode/decode from lat/lon (decimal degrees) into doc value integers
    • Constructor Detail

      • PlanetModel

        public PlanetModel​(double semiMajorAxis,
                           double semiMinorAxis)
        * Construct a Planet Model from the semi major axis, semi minor axis=.
        Parameters:
        semiMajorAxis - is the semi major axis (in meters) defined as 'a' in projection formulae.
        semiMinorAxis - is the semi minor axis (in meters) defined as 'b' in projection formulae.
      • PlanetModel

        public PlanetModel​(InputStream inputStream)
                    throws IOException
        Deserialization constructor.
        Parameters:
        inputStream - is the input stream.
        Throws:
        IOException
    • Method Detail

      • isSphere

        public boolean isSphere()
        Does this planet model describe a sphere?
        Returns:
        true if so.
      • getMinimumMagnitude

        public double getMinimumMagnitude()
        Find the minimum magnitude of all points on the ellipsoid.
        Returns:
        the minimum magnitude for the planet.
      • getMaximumMagnitude

        public double getMaximumMagnitude()
        Find the maximum magnitude of all points on the ellipsoid.
        Returns:
        the maximum magnitude for the planet.
      • getMinimumXValue

        public double getMinimumXValue()
        Find the minimum x value.
        Returns:
        the minimum X value.
      • getMaximumXValue

        public double getMaximumXValue()
        Find the maximum x value.
        Returns:
        the maximum X value.
      • getMinimumYValue

        public double getMinimumYValue()
        Find the minimum y value.
        Returns:
        the minimum Y value.
      • getMaximumYValue

        public double getMaximumYValue()
        Find the maximum y value.
        Returns:
        the maximum Y value.
      • getMinimumZValue

        public double getMinimumZValue()
        Find the minimum z value.
        Returns:
        the minimum Z value.
      • getMaximumZValue

        public double getMaximumZValue()
        Find the maximum z value.
        Returns:
        the maximum Z value.
      • getMeanRadius

        public double getMeanRadius()
        return the calculated mean radius (in units provided by ab and c)
      • encodeValue

        public int encodeValue​(double x)
        encode the provided value from double to integer space
      • decodeValue

        public double decodeValue​(int x)
        Decodes a given integer back into the radian value according to the defined planet model
      • getDocValueEncoder

        public PlanetModel.DocValueEncoder getDocValueEncoder()
        return reference to the DocValueEncoder used to encode/decode Geo3DDocValues
      • pointOnSurface

        public boolean pointOnSurface​(Vector v)
        Check if point is on surface.
        Parameters:
        v - is the point to check.
        Returns:
        true if the point is on the planet surface.
      • pointOnSurface

        public boolean pointOnSurface​(double x,
                                      double y,
                                      double z)
        Check if point is on surface.
        Parameters:
        x - is the x coord.
        y - is the y coord.
        z - is the z coord.
      • pointOutside

        public boolean pointOutside​(Vector v)
        Check if point is outside surface.
        Parameters:
        v - is the point to check.
        Returns:
        true if the point is outside the planet surface.
      • pointOutside

        public boolean pointOutside​(double x,
                                    double y,
                                    double z)
        Check if point is outside surface.
        Parameters:
        x - is the x coord.
        y - is the y coord.
        z - is the z coord.
      • createSurfacePoint

        public GeoPoint createSurfacePoint​(Vector vector)
        Compute a GeoPoint that's scaled to actually be on the planet surface.
        Parameters:
        vector - is the vector.
        Returns:
        the scaled point.
      • createSurfacePoint

        public GeoPoint createSurfacePoint​(double x,
                                           double y,
                                           double z)
        Compute a GeoPoint that's based on (x,y,z) values, but is scaled to actually be on the planet surface.
        Parameters:
        x - is the x value.
        y - is the y value.
        z - is the z value.
        Returns:
        the scaled point.
      • bisection

        public GeoPoint bisection​(GeoPoint pt1,
                                  GeoPoint pt2)
        Compute a GeoPoint that's a bisection between two other GeoPoints.
        Parameters:
        pt1 - is the first point.
        pt2 - is the second point.
        Returns:
        the bisection point, or null if a unique one cannot be found.
      • surfaceDistance

        public double surfaceDistance​(GeoPoint pt1,
                                      GeoPoint pt2)
        Compute surface distance between two points.
        Parameters:
        pt1 - is the first point.
        pt2 - is the second point.
        Returns:
        the adjusted angle, when multiplied by the mean earth radius, yields a surface distance. This will differ from GeoPoint.arcDistance() only when the planet model is not a sphere. @see GeoPoint.arcDistance(Vector)
      • surfacePointOnBearing

        public GeoPoint surfacePointOnBearing​(GeoPoint from,
                                              double dist,
                                              double bearing)
        Compute new point given original point, a bearing direction, and an adjusted angle (as would be computed by the surfaceDistance() method above). The original point can be anywhere on the globe. The bearing direction ranges from 0 (due east at the equator) to pi/2 (due north) to pi (due west at the equator) to 3 pi/4 (due south) to 2 pi.
        Parameters:
        from - is the starting point.
        dist - is the adjusted angle.
        bearing - is the direction to proceed.
        Returns:
        the new point, consistent with the bearing direction and distance.
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object