Class SimpleTile

    • Constructor Detail

      • SimpleTile

        protected SimpleTile()
        Simple constructor.

        Creates an empty tile.

    • Method Detail

      • setGeometry

        public void setGeometry​(double newMinLatitude,
                                double newMinLongitude,
                                double newLatitudeStep,
                                double newLongitudeStep,
                                int newLatitudeRows,
                                int newLongitudeColumns)
        Set the tile global geometry.
        Specified by:
        setGeometry in interface UpdatableTile
        Parameters:
        newMinLatitude - minimum latitude (rad)
        newMinLongitude - minimum longitude (rad)
        newLatitudeStep - step in latitude (size of one raster element) (rad)
        newLongitudeStep - step in longitude (size of one raster element) (rad)
        newLatitudeRows - number of latitude rows
        newLongitudeColumns - number of longitude columns
      • tileUpdateCompleted

        public void tileUpdateCompleted()
        Hook called at the end of tile update completion.
        Specified by:
        tileUpdateCompleted in interface Tile
      • processUpdatedElevation

        protected void processUpdatedElevation​(double[] elevationsArray)
        Process elevation array at completion.

        This method is called at tile update completion, it is expected to be overridden by subclasses. The default implementation does nothing.

        Parameters:
        elevationsArray - elevations array
      • getMinimumLatitude

        public double getMinimumLatitude()
        Get minimum latitude of grid interpolation points.
        Specified by:
        getMinimumLatitude in interface Tile
        Returns:
        minimum latitude of grid interpolation points (rad) (latitude of the center of the cells of South row)
      • getLatitudeAtIndex

        public double getLatitudeAtIndex​(int latitudeIndex)
        Get the latitude at some index.
        Specified by:
        getLatitudeAtIndex in interface Tile
        Parameters:
        latitudeIndex - latitude index
        Returns:
        latitude at the specified index (rad) (latitude of the center of the cells of specified row)
      • getMinimumLongitude

        public double getMinimumLongitude()
        Get minimum longitude.
        Specified by:
        getMinimumLongitude in interface Tile
        Returns:
        minimum longitude (rad) (longitude of the center of the cells of West column)
      • getLongitudeAtIndex

        public double getLongitudeAtIndex​(int longitudeIndex)
        Get the longitude at some index.
        Specified by:
        getLongitudeAtIndex in interface Tile
        Parameters:
        longitudeIndex - longitude index
        Returns:
        longitude at the specified index (rad) (longitude of the center of the cells of specified column)
      • getLatitudeStep

        public double getLatitudeStep()
        Get step in latitude (size of one raster element).
        Specified by:
        getLatitudeStep in interface Tile
        Returns:
        step in latitude (rad)
      • getLongitudeStep

        public double getLongitudeStep()
        Get step in longitude (size of one raster element).
        Specified by:
        getLongitudeStep in interface Tile
        Returns:
        step in longitude (rad)
      • getLatitudeRows

        public int getLatitudeRows()
        Get number of latitude rows.
        Specified by:
        getLatitudeRows in interface Tile
        Returns:
        number of latitude rows
      • getLongitudeColumns

        public int getLongitudeColumns()
        Get number of longitude columns.
        Specified by:
        getLongitudeColumns in interface Tile
        Returns:
        number of longitude columns
      • getMinElevation

        public double getMinElevation()
        Get the minimum elevation in the tile.
        Specified by:
        getMinElevation in interface Tile
        Returns:
        minimum elevation in the tile (m)
      • getMinElevationLatitudeIndex

        public int getMinElevationLatitudeIndex()
        Get the latitude index of min elevation.
        Specified by:
        getMinElevationLatitudeIndex in interface Tile
        Returns:
        latitude index of min elevation
      • getMinElevationLongitudeIndex

        public int getMinElevationLongitudeIndex()
        Get the longitude index of min elevation.
        Specified by:
        getMinElevationLongitudeIndex in interface Tile
        Returns:
        longitude index of min elevation
      • getMaxElevation

        public double getMaxElevation()
        Get the maximum elevation in the tile.
        Specified by:
        getMaxElevation in interface Tile
        Returns:
        maximum elevation in the tile (m)
      • getMaxElevationLatitudeIndex

        public int getMaxElevationLatitudeIndex()
        Get the latitude index of max elevation.
        Specified by:
        getMaxElevationLatitudeIndex in interface Tile
        Returns:
        latitude index of max elevation
      • getMaxElevationLongitudeIndex

        public int getMaxElevationLongitudeIndex()
        Get the longitude index of max elevation.
        Specified by:
        getMaxElevationLongitudeIndex in interface Tile
        Returns:
        longitude index of max elevation
      • setElevation

        public void setElevation​(int latitudeIndex,
                                 int longitudeIndex,
                                 double elevation)
        Set the elevation for one raster element.

        BEWARE! The order of the indices follows geodetic conventions, i.e. the latitude is given first and longitude afterwards, so the first index specifies a row index with zero at South and max value at North, and the second index specifies a column index with zero at West and max value at East. This is not the same as some raster conventions (as our row index increases from South to North) and this is also not the same as Cartesian coordinates as our ordinate index appears before our abscissa index).

        Specified by:
        setElevation in interface UpdatableTile
        Parameters:
        latitudeIndex - index of latitude (row index)
        longitudeIndex - index of longitude (column index)
        elevation - elevation (m)
      • getElevationAtIndices

        public double getElevationAtIndices​(int latitudeIndex,
                                            int longitudeIndex)
        Get the elevation of an exact grid point.
        Specified by:
        getElevationAtIndices in interface Tile
        Parameters:
        latitudeIndex - grid point index along latitude
        longitudeIndex - grid point index along longitude
        Returns:
        elevation at grid point (m)
      • interpolateElevation

        public double interpolateElevation​(double latitude,
                                           double longitude)
        Interpolate elevation.

        In order to cope with numerical accuracy issues when computing points at tile boundary, a slight tolerance (typically 1/8 cell) around the tile is allowed. Elevation can therefore be interpolated (really extrapolated in this case) even for points slightly overshooting tile boundaries, using the closest tile cell. Attempting to interpolate too far from the tile will trigger an exception.

        This classes uses an arbitrary 1/8 cell tolerance for interpolating slightly out of tile points.

        Specified by:
        interpolateElevation in interface Tile
        Parameters:
        latitude - ground point latitude
        longitude - ground point longitude
        Returns:
        interpolated elevation (m)
      • cellIntersection

        public NormalizedGeodeticPoint cellIntersection​(NormalizedGeodeticPoint p,
                                                        Vector3D los,
                                                        int latitudeIndex,
                                                        int longitudeIndex)
        Find the intersection of a line-of-sight and a Digital Elevation Model cell.

        Beware that for continuity reasons, the point argument in cellIntersection is normalized with respect to other points used by the caller. This implies that the longitude may be outside of the [-π ; +π] interval (or the [0 ; 2π] interval, depending on the DEM). In particular, when a Line Of Sight crosses the antimeridian at ±π longitude, the library may call the cellIntersection method with a point having a longitude of -π-ε to ensure this continuity. As tiles are stored with longitude clipped to a some DEM specific interval (either [-π ; +π] or [0 ; 2π]), implementations MUST take care to clip the input point back to the tile interval using MathUtils.normalizeAngle(p.getLongitude(), someLongitudeWithinTheTile). The output point normalization should also be made consistent with the current tile.

        Specified by:
        cellIntersection in interface Tile
        Parameters:
        p - point on the line (beware its longitude is not normalized with respect to tile)
        los - line-of-sight, in the topocentric frame (East, North, Zenith) of the point, scaled to match radians in the horizontal plane and meters along the vertical axis
        latitudeIndex - latitude index of the Digital Elevation Model cell
        longitudeIndex - longitude index of the Digital Elevation Model cell
        Returns:
        point corresponding to line-of-sight crossing the Digital Elevation Model surface if it lies within the cell, null otherwise
      • getFloorLatitudeIndex

        public int getFloorLatitudeIndex​(double latitude)
        Get the floor latitude index of a point.

        The specified latitude is always between index and index+1.

        Specified by:
        getFloorLatitudeIndex in interface Tile
        Parameters:
        latitude - geodetic latitude
        Returns:
        floor latitude index (it may lie outside of the tile!)
      • getFloorLongitudeIndex

        public int getFloorLongitudeIndex​(double longitude)
        Get the floor longitude index of a point.

        The specified longitude is always between index and index+1.

        Specified by:
        getFloorLongitudeIndex in interface Tile
        Parameters:
        longitude - geodetic longitude
        Returns:
        floor longitude index (it may lie outside of the tile!)
      • getDoubleLatitudeIndex

        protected double getDoubleLatitudeIndex​(double latitude)
        Get the latitude index of a point.
        Parameters:
        latitude - geodetic latitude (rad)
        Returns:
        latitude index (it may lie outside of the tile!)
      • getDoubleLongitudeIndex

        protected double getDoubleLongitudeIndex​(double longitude)
        Get the longitude index of a point.
        Parameters:
        longitude - geodetic longitude (rad)
        Returns:
        longitude index (it may lie outside of the tile!)
      • getLocation

        public Tile.Location getLocation​(double latitude,
                                         double longitude)
        Check if a tile covers a ground point.
        Specified by:
        getLocation in interface Tile
        Parameters:
        latitude - ground point latitude
        longitude - ground point longitude
        Returns:
        location of the ground point with respect to tile