public class LocalElevationModel extends AbstractElevationModel
Note: Unless the amount of data associated with the local elevation models is small, it's best to construct and add elevations to a local elevation model on a thread other than the event dispatch thread in order to avoid freezing the user interface.
Modifier and Type | Class and Description |
---|---|
protected static class |
LocalElevationModel.LocalTile
An internal class that represents one elevation raster in the elevation model.
|
Modifier and Type | Field and Description |
---|---|
protected double[] |
extremeElevations
The min and max elevations.
|
protected java.util.concurrent.CopyOnWriteArrayList<LocalElevationModel.LocalTile> |
tiles
The list of elevation rasters, one per file specified.
|
dataFileStore, enabled, expiryTime, missingDataFlag, missingDataValue, networkRetrievalEnabled
Constructor and Description |
---|
LocalElevationModel() |
Modifier and Type | Method and Description |
---|---|
void |
addElevations(java.nio.ByteBuffer byteBuffer,
Sector sector,
int width,
int height,
AVList parameters)
Adds new elevations to this elevation model.
|
void |
addElevations(java.io.File file)
Adds the specified elevation data to this elevation model.
|
void |
addElevations(java.lang.String filename)
Adds the specified elevation data to this elevation model.
|
protected void |
addRaster(DataRaster raster,
java.lang.String filename)
Adds a new raster to this elevation model.
|
protected void |
adjustMinMax(LocalElevationModel.LocalTile tile)
Updates the min and max elevations for this elevation model to account for a specified tile.
|
boolean |
contains(Angle latitude,
Angle longitude)
Indicates whether a specified location is within the elevation model's domain.
|
protected double |
doGetElevations(Sector sector,
java.util.List<? extends LatLon> latlons,
double targetResolution,
double[] buffer,
boolean mapMissingData)
Performs the lookup and assembly of elevations for a list of specified locations.
|
protected LocalElevationModel.LocalTile |
findTile(double latRadians,
double lonRadians)
Finds the tile in this elevation model that contains a specified location.
|
double |
getBestResolution(Sector sector)
Indicates the best resolution attainable for a specified sector.
|
double |
getElevations(Sector sector,
java.util.List<? extends LatLon> latlons,
double targetResolution,
double[] buffer)
Returns the elevations of a collection of locations.
|
double[] |
getExtremeElevations(Angle latitude,
Angle longitude)
Returns the minimum and maximum elevations at a specified location.
|
double[] |
getExtremeElevations(Sector sector)
Returns the minimum and maximum elevations within a specified sector of the elevation model.
|
double |
getMaxElevation()
Returns the maximum elevation contained in the elevation model.
|
double |
getMinElevation()
Returns the minimum elevation contained in the elevation model.
|
Sector |
getSector()
Returns the sector spanned by this elevation model.
|
double |
getUnmappedElevation(Angle latitude,
Angle longitude)
Returns the elevation at a specified location, but without replacing missing data with the elevation model's
missing data replacement value.
|
double |
getUnmappedElevations(Sector sector,
java.util.List<? extends LatLon> latlons,
double targetResolution,
double[] buffer)
Returns the elevations of a collection of locations.
|
int |
intersects(Sector sector)
Indicates whether the elevation model covers a specified sector either partially or fully.
|
boolean |
isExtremesCachingEnabled()
Indicates whether extreme value caching is enabled.
|
protected java.lang.Double |
lookupElevation(double latRadians,
double lonRadians)
Looks up an elevation for a specified location.
|
void |
setExtremesCachingEnabled(boolean enabled)
Indicates whether extreme values of sectors should be cached as they're computed.
|
composeElevations, createElevationModelConfigElements, dispose, getBestResolutions, getDataFileStore, getDetailHint, getElevation, getElevationModelConfigParams, getElevations, getExpiryTime, getLocalDataAvailability, getMissingDataReplacement, getMissingDataSignal, getName, getRestorableState, getUnmappedElevations, getUnmappedLocalSourceElevation, isElevationModelConfigDocument, isEnabled, isNetworkRetrievalEnabled, isTransparentValue, restoreState, setDataFileStore, setEnabled, setExpiryTime, setMissingDataReplacement, setMissingDataSignal, setName, setNetworkRetrievalEnabled, toString
onMessage, propertyChange
addPropertyChangeListener, addPropertyChangeListener, clearList, copy, firePropertyChange, firePropertyChange, getBooleanValue, getBooleanValue, getChangeSupport, getDoubleValue, getDoubleValue, getEntries, getIntegerValue, getIntegerValue, getLongValue, getLongValue, getRestorableStateForAVPair, getStringValue, getStringValue, getStringValue, getValue, getValues, hasKey, removeKey, removePropertyChangeListener, removePropertyChangeListener, setValue, setValues
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
addPropertyChangeListener, addPropertyChangeListener, clearList, copy, firePropertyChange, firePropertyChange, getEntries, getStringValue, getValue, getValues, hasKey, removeKey, removePropertyChangeListener, removePropertyChangeListener, setValue, setValues
onMessage
protected double[] extremeElevations
protected java.util.concurrent.CopyOnWriteArrayList<LocalElevationModel.LocalTile> tiles
public void addElevations(java.nio.ByteBuffer byteBuffer, Sector sector, int width, int height, AVList parameters)
byteBuffer
- the elevations to add.sector
- the sector containing the elevations.width
- the number of elevation values in a row of the array. Each consecutive group of width
elevation values is considered one row of the array, with the first element of the buffer
starting the row of elevations at the sector's maximum latitude.height
- the number of rows in the array.parameters
- a list of key-value pairs indicating information about the raster. A value for AVKey.DATA_TYPE
is required. Values recognized but not required are AVKey.MISSING_DATA_SIGNAL
, AVKey.BYTE_ORDER
, AVKey.ELEVATION_MIN
and AVKey.ELEVATION_MAX
.java.lang.IllegalArgumentException
- if either the buffer, sector or parameters list is null, or if a key-value pair
for AVKey.DATA_TYPE
is not specified in the parameters.public void addElevations(java.io.File file) throws java.io.IOException
file
- the file containing the elevation data.java.lang.IllegalArgumentException
- if the file is null or does not exist, if the file does not contain elevations
in a recognizable format, or if the specified file does not contain required
information such as the data's location and data type.java.io.IOException
- if an exception occurs while opening or reading the specified file.WWRuntimeException
- if an error occurs attempting to read and interpret the elevation data, or if an
error occurs attempting to read and interpret the file's contents.public void addElevations(java.lang.String filename) throws java.io.IOException
filename
- the file containing the elevation data.java.lang.IllegalArgumentException
- if the filename is null or the file does not exist, or if the file does not
contain elevations in a recognizable format.java.io.IOException
- if an exception occurs while opening or reading the specified file.WWRuntimeException
- if an error occurs attempting to read and interpret the elevation data, or if
necessary information is missing from the data file or its auxiliary files.protected void addRaster(DataRaster raster, java.lang.String filename) throws java.io.IOException
raster
- the raster to add.filename
- the filename associated with the raster. Used only for error reporting.java.lang.IllegalArgumentException
- if necessary information is missing from the raster.java.io.IOException
- if an exception occurs while opening or reading the specified file.WWRuntimeException
- if an error occurs attempting to read and interpret the elevation data.protected void adjustMinMax(LocalElevationModel.LocalTile tile)
tile
- the tile to account for.public boolean contains(Angle latitude, Angle longitude)
ElevationModel
latitude
- the latitude of the location in question.longitude
- the longitude of the location in question.protected double doGetElevations(Sector sector, java.util.List<? extends LatLon> latlons, double targetResolution, double[] buffer, boolean mapMissingData)
sector
- the sector containing the specified locations.latlons
- the list of locations at which to lookup elevations.targetResolution
- the desired maximum horizontal resolution of the elevation data to draw from.buffer
- a buffer in which to return the elevations. Must be at least as large as the list of
locations.mapMissingData
- indicates whether to replace any elevations that match this elevation model's missing
data signal to this model's missing data replacement value.Double.MAX_VALUE
if individual elevations cannot be
determined for all of the locations.java.lang.IllegalArgumentException
- if either the sector, list of locations or buffer is null, or the buffer size is
not at least as large as the location list.AbstractElevationModel.setMissingDataSignal(double)
,
AbstractElevationModel.setMissingDataReplacement(double)
protected LocalElevationModel.LocalTile findTile(double latRadians, double lonRadians)
latRadians
- the location's latitude, in radians.lonRadians
- the location's longitude, in radians.public double getBestResolution(Sector sector)
ElevationModel
sector
- the sector in question. If null, the elevation model's best overall resolution is returned. This is
the best attainable at some locations but not necessarily at all locations.Double.MAX_VALUE
if the
sector does not intersect the elevation model.public double getElevations(Sector sector, java.util.List<? extends LatLon> latlons, double targetResolution, double[] buffer)
ElevationModel
sector
- the sector in question.latlons
- the locations to return elevations for. If a location is null, the output buffer for that
location is not modified.targetResolution
- the desired horizontal resolution, in radians, of the raster or other elevation sample
from which elevations are drawn. (To compute radians from a distance, divide the distance
by the radius of the globe, ensuring that both the distance and the radius are in the
same units.)buffer
- an array in which to place the returned elevations. The array must be pre-allocated and
contain at least as many elements as the list of locations.Double.MAX_VALUE
if individual elevations cannot be
determined for all of the locations.ElevationModel.setMissingDataSignal(double)
public double[] getExtremeElevations(Angle latitude, Angle longitude)
ElevationModel
latitude
- the latitude of the location in question.longitude
- the longitude of the location in question.double
array indicating, respectively, the minimum and maximum elevations at
the specified location. These values are the global minimum and maximum if the local minimum and maximum
values are currently unknown.public double[] getExtremeElevations(Sector sector)
ElevationModel
sector
- the sector in question.double
array indicating, respectively, the sector's minimum and maximum
elevations. These elements are the global minimum and maximum if the local minimum and maximum values are
currently unknown.public double getMaxElevation()
ElevationModel
public double getMinElevation()
ElevationModel
public Sector getSector()
public double getUnmappedElevation(Angle latitude, Angle longitude)
ElevationModel
latitude
- the latitude of the location for which to return the elevation.longitude
- the longitude of the location for which to return the elevation.public double getUnmappedElevations(Sector sector, java.util.List<? extends LatLon> latlons, double targetResolution, double[] buffer)
ElevationModel
sector
- the sector in question.latlons
- the locations to return elevations for. If a location is null, the output buffer for that
location is not modified.targetResolution
- the desired horizontal resolution, in radians, of the raster or other elevation sample
from which elevations are drawn. (To compute radians from a distance, divide the distance
by the radius of the globe, ensuring that both the distance and the radius are in the
same units.)buffer
- an array in which to place the returned elevations. The array must be pre-allocated and
contain at least as many elements as the list of locations.Double.MAX_VALUE
if individual elevations cannot be
determined for all of the locations.ElevationModel.setMissingDataSignal(double)
public int intersects(Sector sector)
ElevationModel
sector
- the sector in question.public boolean isExtremesCachingEnabled()
ElevationModel
ElevationModel.setExtremesCachingEnabled(boolean)
protected java.lang.Double lookupElevation(double latRadians, double lonRadians)
latRadians
- the latitude of the location, in radians.lonRadians
- the longitude of the location, in radians.public void setExtremesCachingEnabled(boolean enabled)
ElevationModel
enabled
- true if extreme value caching should be performed.