Class FlatGlobe

  • All Implemented Interfaces:
    AVList, MessageListener, Extent, Globe, Globe2D, WWObject, java.beans.PropertyChangeListener, java.util.EventListener
    Direct Known Subclasses:
    EarthFlat

    public class FlatGlobe
    extends EllipsoidalGlobe
    implements Globe2D
    Defines a globe represented as a projection onto a plane. The projection type is modifiable. The default projection is Mercator. New projections may be added by extending this class and overriding geodeticToCartesian cartesianToGeodetic.

    This globe uses a Cartesian coordinate system in the world plane is located at the origin and has UNIT-Z as normal. The Y axis points to the north pole. The Z axis points up. The X axis completes a right-handed coordinate system, and points east. Latitude and longitude zero are at the origin on y and x respectively. Sea level is at z = zero.

    • Field Detail

      • PROJECTION_LAT_LON

        public static final java.lang.String PROJECTION_LAT_LON
        Latitude/Longitude projection. Also known as the geographic projection, the equirectangular projection, or the Plate Carree projection.
        See Also:
        Constant Field Values
      • PROJECTION_MODIFIED_SINUSOIDAL

        public static final java.lang.String PROJECTION_MODIFIED_SINUSOIDAL
        See Also:
        Constant Field Values
      • continuous

        protected boolean continuous
      • offset

        protected int offset
      • offsetVector

        protected Vec4 offsetVector
    • Constructor Detail

      • FlatGlobe

        public FlatGlobe​(double equatorialRadius,
                         double polarRadius,
                         double es,
                         ElevationModel em)
        Create a new globe. The globe will use the Mercator projection. The projection can be changed using setProjection(GeographicProjection).
        Parameters:
        equatorialRadius - Radius of the globe at the equator.
        polarRadius - Radius of the globe at the poles.
        es - Square of the globe's eccentricity.
        em - Elevation model. May be null.
    • Method Detail

      • getStateKey

        public java.lang.Object getStateKey​(DrawContext dc)
        Description copied from interface: Globe
        Returns a state key identifying this globe's current configuration. Can be used to subsequently determine whether the globe's configuration has changed.
        Specified by:
        getStateKey in interface Globe
        Overrides:
        getStateKey in class EllipsoidalGlobe
        Parameters:
        dc - the current draw context.
        Returns:
        a state key for the globe's current configuration.
      • getGlobeStateKey

        public GlobeStateKey getGlobeStateKey​(DrawContext dc)
        Description copied from interface: Globe
        Returns a typed state key identifying this globe's current configuration. Can be used to subsequently determine whether the globe's configuration has changed.
        Specified by:
        getGlobeStateKey in interface Globe
        Overrides:
        getGlobeStateKey in class EllipsoidalGlobe
        Parameters:
        dc - the current draw context.
        Returns:
        a state key for the globe's current configuration.
      • getGlobeStateKey

        public GlobeStateKey getGlobeStateKey()
        Description copied from interface: Globe
        Returns a typed state key identifying this globe's current configuration. Can be used to subsequently determine whether the globe's configuration has changed.
        Specified by:
        getGlobeStateKey in interface Globe
        Overrides:
        getGlobeStateKey in class EllipsoidalGlobe
        Returns:
        a state key for the globe's current configuration.
      • setProjection

        public void setProjection​(GeographicProjection projection)
        Description copied from interface: Globe2D
        Specifies the geographic projection for this globe. The geographic projection converts geographic positions to Cartesian coordinates and back. Implementations of this interface define their default projection.
        Specified by:
        setProjection in interface Globe2D
        Parameters:
        projection - The projection to apply to this globe.
        See Also:
        GeographicProjection
      • setContinuous

        public void setContinuous​(boolean continuous)
        Description copied from interface: Globe2D
        Specifies whether to treat the associated projection as contiguous with itself. If true, the scene controller will make the implementing globe appear to scroll continuously horizontally. Calling this method overrides the associated projection's value for this field.
        Specified by:
        setContinuous in interface Globe2D
        Parameters:
        continuous - true if it makes sense to treat the associated projection as continuous, otherwise false.
        See Also:
        GeographicProjection.isContinuous()
      • isContinuous

        public boolean isContinuous()
        Description copied from interface: Globe2D
        Indicates whether it makes sense to treat the associated projection as contiguous with itself. If true, the scene controller will make the implementing globe appear to scroll continuously horizontally.
        Specified by:
        isContinuous in interface Globe2D
        Returns:
        true if it makes sense to treat the associated projection as continuous, otherwise false.
      • getOffset

        public int getOffset()
        Specified by:
        getOffset in interface Globe2D
      • setOffset

        public void setOffset​(int offset)
        Description copied from interface: Globe2D
        Indicates an offset to apply to Cartesian points computed by this globe. The offset is in units of globe widths, e.g., an offset of one indicates a Cartesian offset of the globe's width in meters.
        Specified by:
        setOffset in interface Globe2D
        Parameters:
        offset - The offset to apply, in units of globe widths.
      • intersects

        public boolean intersects​(Frustum frustum)
        Description copied from interface: Extent
        Determines whether or not this Extent intersects frustum. Returns true if any part of these two objects intersect, including the case where either object wholly contains the other, false otherwise.
        Specified by:
        intersects in interface Extent
        Overrides:
        intersects in class EllipsoidalGlobe
        Parameters:
        frustum - the Frustum with which to test for intersection.
        Returns:
        true if there is an intersection, false otherwise.
      • intersects

        public boolean intersects​(Line line)
        Description copied from interface: Extent
        Determines whether or not line intersects this Extent. This method may be faster than checking the size of the array returned by intersect(Line). Implementing methods must ensure that this method returns true if and only if intersect(Line) returns a non-null array containing at least one element.
        Specified by:
        intersects in interface Extent
        Overrides:
        intersects in class EllipsoidalGlobe
        Parameters:
        line - the Line with which to test for intersection.
        Returns:
        true if an intersection is found, false otherwise.
      • intersects

        public boolean intersects​(Plane plane)
        Description copied from interface: Extent
        Calculate whether or not this Extent is intersected by plane.
        Specified by:
        intersects in interface Extent
        Overrides:
        intersects in class EllipsoidalGlobe
        Parameters:
        plane - the Plane with which to test for intersection.
        Returns:
        true if plane is found to intersect this Extent.
      • computeNorthPointingTangentAtLocation

        public Vec4 computeNorthPointingTangentAtLocation​(Angle latitude,
                                                          Angle longitude)
        Description copied from interface: Globe
        Computes a vector tangent to this globe and pointing toward the north pole.
        Specified by:
        computeNorthPointingTangentAtLocation in interface Globe
        Overrides:
        computeNorthPointingTangentAtLocation in class EllipsoidalGlobe
        Parameters:
        latitude - Latitude of the location at which to compute the tangent vector.
        longitude - Longitude of the location at which to compute the tangent vector.
        Returns:
        A vector tangent to this globe at (latitude, longitude), and pointing toward the north pole of this globe.
      • computeSurfaceOrientationAtPosition

        public Matrix computeSurfaceOrientationAtPosition​(Angle latitude,
                                                          Angle longitude,
                                                          double metersElevation)
        Description copied from class: EllipsoidalGlobe
        Returns the cartesian transform matrix that maps model coordinates to a local coordinate system at (latitude, longitude, metersElevation). The X axis is mapped to the vector tangent to the globe and pointing East. The Y axis is mapped to the vector tangent to the globe and pointing to the North Pole. The Z axis is mapped to the globe normal at (latitude, longitude, metersElevation). The origin is mapped to the cartesian position of (latitude, longitude, metersElevation).
        Specified by:
        computeSurfaceOrientationAtPosition in interface Globe
        Overrides:
        computeSurfaceOrientationAtPosition in class EllipsoidalGlobe
        Parameters:
        latitude - the latitude of the position.
        longitude - the longitude of the position.
        metersElevation - the number of meters above or below mean sea level.
        Returns:
        the cartesian transform matrix that maps model coordinates to the local coordinate system at the specified position.
      • getElevation

        public double getElevation​(Angle latitude,
                                   Angle longitude)
        Description copied from interface: Globe
        Indicates the elevation at a specified location. If the elevation at the specified location is the elevation model's missing data signal, or if the location specified is outside the elevation model's coverage area, the elevation model's missing data replacement value is returned.

        The elevation returned from this method is the best available in memory. If no elevation is in memory, the elevation model's minimum extreme elevation at the location is returned. Local disk caches are not consulted.

        Specified by:
        getElevation in interface Globe
        Overrides:
        getElevation in class EllipsoidalGlobe
        Parameters:
        latitude - the latitude of the location at which to determine elevation.
        longitude - the longitude of the location at which to determine elevation.
        Returns:
        The elevation corresponding to the specified location, or the elevation model's missing-data replacement value if there is no elevation for the given location. Returns zero if no elevation model is available.
        See Also:
        Globe.getElevationModel()
      • geodeticToCartesian

        protected Vec4 geodeticToCartesian​(Angle latitude,
                                           Angle longitude,
                                           double metersElevation)
        Maps a position to a flat world Cartesian coordinates. The world plane is located at the origin and has UNIT-Z as normal. The Y axis points to the north pole. The Z axis points up. The X axis completes a right-handed coordinate system, and points east. Latitude and longitude zero are at the origin on y and x respectively. Sea level is at z = zero.
        Overrides:
        geodeticToCartesian in class EllipsoidalGlobe
        Parameters:
        latitude - the latitude of the position.
        longitude - the longitude of the position.
        metersElevation - the number of meters above or below mean sea level.
        Returns:
        The Cartesian point corresponding to the input position.
      • geodeticToCartesian

        protected void geodeticToCartesian​(Sector sector,
                                           int numLat,
                                           int numLon,
                                           double[] metersElevation,
                                           Vec4[] out)
        Description copied from class: EllipsoidalGlobe
        Maps a grid of geographic positions to Cartesian coordinates. The Y axis points to the north pole. The Z axis points to the intersection of the prime meridian and the equator, in the equatorial plane. The X axis completes a right-handed coordinate system, and is 90 degrees east of the Z axis and also in the equatorial plane. Sea level is at z = zero.

        This method provides an interface for efficient generation of a grid of cartesian points within a sector. The grid is constructed by dividing the sector into numLon x numLat evenly separated points in geographic coordinates. The first and last points in latitude and longitude are placed at the sector's minimum and maximum boundary, and the remaining points are spaced evenly between those boundary points.

        For each grid point within the sector, an elevation value is specified via an array of elevations. The calculation at each position incorporates the associated elevation.

        Overrides:
        geodeticToCartesian in class EllipsoidalGlobe
        Parameters:
        sector - The sector over which to generate the points.
        numLat - The number of points to generate latitudinally.
        numLon - The number of points to generate longitudinally.
        metersElevation - An array of elevations to incorporate in the point calculations. There must be one elevation value in the array for each generated point, so the array must have a length of at least numLon x numLat. Elevations are read from this array in row major order, beginning with the row of minimum latitude.
        out - An array to hold the computed cartesian points. It must have a length of at least numLon x numLat. Points are written to this array in row major order, beginning with the row of minimum latitude.
      • isPointAboveElevation

        public boolean isPointAboveElevation​(Vec4 point,
                                             double elevation)
        Determines whether a point is above a given elevation
        Specified by:
        isPointAboveElevation in interface Globe
        Overrides:
        isPointAboveElevation in class EllipsoidalGlobe
        Parameters:
        point - the Vec4 point to test.
        elevation - the elevation to test for.
        Returns:
        true if the given point is above the given elevation.