com.bbn.openmap.layer.etopo
Class ETOPOLayer

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by com.bbn.openmap.Layer
                  extended by com.bbn.openmap.layer.OMGraphicHandlerLayer
                      extended by com.bbn.openmap.layer.etopo.ETOPOLayer
All Implemented Interfaces:
ProjectionListener, GestureResponsePolicy, OMGraphicHandler, ProjectionPainter, PropertyConsumer, java.awt.event.ActionListener, java.awt.image.ImageObserver, java.awt.MenuContainer, java.beans.beancontext.BeanContextChild, java.beans.beancontext.BeanContextMembershipListener, java.io.Serializable, java.util.EventListener
Direct Known Subclasses:
ETOPOJarLayer

public class ETOPOLayer
extends OMGraphicHandlerLayer
implements java.awt.event.ActionListener

ETOPOLayer extends Layer to provide rendering of the ETOPO5 world elevation data set. The ETOPO5 data consists of terrain altitude and ocean depth measurements at 5 minute intervals for the entire globe. Rendering is allowed in any projection that implements the inverse(int,int) method. Two types of rendering are provided: grayscale slope-shaded and colored slope-shaded.

The distribution consists of the following:

The sampled ETOPO data sets are provided to speed up the loading of data to compute the slope shading. The algorithm inverse projects the x/y screen coords (for the entire projection screen space) to get the corresponding lat/lon coords then samples the database to get altitude/depth and slope values. While this method is slower than the forward projection method, it does provide a more attractive screen presentation and will support all projections (not just the equidistant cylindrical). A palette provides the ability to choose between the 5,10, or 15 minute resolutions, as well as color or grayscale selection, transparency, and slope contrast.

The ETOPOLayer also relies on properties to set its variables, such as the etopo frame paths (there can be several at a time), the opaqueness of the frame images, number of colors to use, and some other display variables. The ETOPOLayer properties look something like this:

#------------------------------
# Properties for ETOPOLayer
#------------------------------
# This property should reflect the paths to the etopo directory
etopo.path=c:/openmap/share

# Number between 0-255: 0 is transparent, 255 is opaque
etopo.opaque=255

# Number of colors to use on the maps - 16, 32, 216
etopo.number.colors=216

# Type of display for the data
# 0 = grayscale slope shading
# 1 = colored slope shading
etopo.view.type=1

# Contrast setting, 1-5
etopo.contrast=3

# lat/lon spacing in minutes
# must be 5, 10, or 15
etopo.minute.spacing=10

#-------------------------------------
# End of properties for ETOPOLayer
#-------------------------------------

See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
 
Nested classes/interfaces inherited from class java.awt.Container
java.awt.Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  int bandHeight
          The elevation range to use for each color in band shading.
protected  int[] blueElev
           
protected  int bufferHeight
           
protected  int bufferWidth
           
static int COLOREDSHADING
          Colorized slope shading.
protected  short[] dataBuffer
          The etopo elevation data
static int DEFAULT_MINUTE_SPACING
          Default minute spacing
static int DEFAULT_OPAQUENESS
          for colorizing
static int DEFAULT_SLOPE_ADJUST
          Default contrast setting for slope shading.
protected  int[] elevLimit
          elevation bands
protected  int elevLimitCnt
          number of elevation bands
protected static java.lang.String[] etopoFileNames
          ETOPO elevation files
protected static int[] etopoHeights
           
static java.lang.String ETOPOMinuteSpacingProperty
           
static java.lang.String ETOPOPathProperty
          property suffixes
static java.lang.String ETOPOPixelSpacerProperty
           
static java.lang.String ETOPOSlopeAdjustProperty
           
protected  double[] etopoSpacings
          Spacings (in meters) between adjacent lon points at the equator.
static java.lang.String ETOPOViewTypeProperty
           
protected static int[] etopoWidths
          dimensions of the ETOPO files (don't mess with these!)
protected  int[] greenElev
           
protected  int minuteSpacing
          The current resolution (in minutes)
protected  int opaqueness
          transparency control
static java.lang.String OpaquenessProperty
           
protected  javax.swing.Box paletteBox
          The user interface palette for the ETOPO layer.
protected  java.lang.String path
          The paths to the ETOPO directory, telling where the data is.
protected  int[] redElev
          elevation band colors (one for each elevation band)
protected  int slopeAdjust
          A contrast adjustment, for slope shading (1-5).
protected  java.awt.Color[][] slopeColors
          for slope shading colors, indexed by elevation band then slope
protected  byte[] slopeMap
          Holds the slope values, updated when the resolution changes or the slope adjustment (contrast) is changed.
protected  boolean slopeReset
           
static int SLOPESHADING
          Gray scale slope shading, sun from the Northwest.
protected  int spacer
          Number of pixel spacers that should be added to a data file, per line, to adjust for skewing.
protected  boolean spacingReset
           
protected  int viewType
          The display type for the etopo images.
 
Fields inherited from class com.bbn.openmap.layer.OMGraphicHandlerLayer
consumeEvents, ConsumeEventsProperty, filter, interruptable, InterruptableProperty, layerWorker, LAYERWORKER_LOCK, layerWorkerQueue, logger, mouseEventInterpreter, mouseModeIDs, MouseModesProperty, projectionChangePolicy, ProjectionChangePolicyProperty, renderPolicy, RenderPolicyProperty, selectedList, TransparencyProperty
 
Fields inherited from class com.bbn.openmap.Layer
addAsBackground, AddAsBackgroundProperty, addToBeanContext, AddToBeanContextProperty, attributes, autoPalette, AutoPaletteProperty, beanContextChildSupport, coordTransform, DataPathPrefixProperty, DisplayPaletteCmd, DisplayPropertiesCmd, doHack, HidePaletteCmd, i18n, localHackList, maxScale, MaxScaleProperty, minScale, MinScaleProperty, palette, paletteListener, PrettyNameProperty, propertyPrefix, readyToPaint, RedrawCmd, removable, RemovableProperty, SWING_PACKAGE, TransformProperty, windowSupport
 
Fields inherited from class javax.swing.JComponent
accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface com.bbn.openmap.PropertyConsumer
EditorProperty, initPropertiesProperty, LabelEditorProperty, ScopedEditorProperty
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
ETOPOLayer()
          The default constructor for the Layer.
ETOPOLayer(java.lang.String pathToETOPODir)
          The default constructor for the Layer.
 
Method Summary
 void actionPerformed(java.awt.event.ActionEvent e)
          Used just for the redraw button.
protected  OMRaster buildRaster()
           
protected  void buildSlopeMap()
          Builds the slope index map.
protected  java.awt.Color getColor(short elevation, byte slopeVal)
           
protected  int getElevIndex(short el)
           
 java.awt.Component getGUI()
          Creates the interface palette.
protected  void loadBuffer()
          Loads the database from the appropriate file based on the current resolution.
 OMGraphicList prepare()
          Prepares the graphics for the layer.
protected  void setDefaultValues()
           
 void setPath(java.lang.String pathToETOPODir)
           
 void setProperties(java.lang.String prefix, java.util.Properties properties)
          Set all the ETOPO properties from a properties object.
 
Methods inherited from class com.bbn.openmap.layer.OMGraphicHandlerLayer
canSetList, copy, createLayerWorker, cut, deselect, dispose, doAction, doPrepare, filter, filter, filter, getConsumeEvents, getDefaultSettingsPanel, getFilter, getInfoText, getItemsForMapMenu, getItemsForOMGraphicMenu, getLayerWorker, getList, getMapMouseListener, getMouseEventInterpreter, getMouseModeIDsForEvents, getProjectionChangePolicy, getProperties, getPropertyInfo, getRedrawButton, getRenderPolicy, getSelected, getSettingsButton, getToolTipTextFor, getTransparency, getTransparencyAdjustmentPanel, highlight, isCancelled, isHighlightable, isInterruptable, isSelectable, isWorking, leftClick, mouseOver, paint, paste, projectionChanged, receivesMapEvents, renderDataForProjection, resetFiltering, select, setConsumeEvents, setFilter, setInterruptable, setLayerWorker, setList, setMouseEventInterpreter, setMouseModeIDsForEvents, setProjectionChangePolicy, setRenderPolicy, setTransparency, supportsSQL, unhighlight, workerComplete
 
Methods inherited from class com.bbn.openmap.Layer
addComponentListener, added, addInfoDisplayListener, addLayerStatusListener, addMouseListener, addVetoableChangeListener, childrenAdded, childrenRemoved, clearListeners, connectToBeanContext, createWindowSupport, disconnectFromBeanContext, finalize, findAndInit, findAndInit, findAndUndo, fireHideToolTip, firePaletteEvent, fireRequestBrowserContent, fireRequestBrowserContent, fireRequestCursor, fireRequestInfoLine, fireRequestInfoLine, fireRequestInfoLine, fireRequestMessage, fireRequestMessage, fireRequestToolTip, fireRequestToolTip, fireRequestURL, fireRequestURL, fireStatusUpdate, fireStatusUpdate, fireVetoableChange, getAddAsBackground, getAddToBeanContext, getAttribute, getBeanContext, getCoordTransform, getIcon, getMaxScale, getMinScale, getPackage, getPalette, getProjection, getPropertyPrefix, getWindowSupport, hasGUI, hidePalette, isAutoPalette, isProjectionOK, isReadyToPaint, isRemovable, notifyHideHack, prependDataPathPrefix, putAttribute, removeComponentListener, removeConfirmed, removed, removeInfoDisplayListener, removeLayerStatusListener, removeVetoableChangeListener, repaint, resetPalette, setAddAsBackground, setAddToBeanContext, setAutoPalette, setBeanContext, setCoordTransform, setIcon, setLayerProperties, setMaxScale, setMinScale, setName, setPaletteVisible, setProjection, setProjection, setProperties, setPropertyPrefix, setReadyToPaint, setRemovable, setVisible, setWindowSupport, showPalette
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, unregisterKeyboardAction, update, updateUI
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.beans.beancontext.BeanContextChild
addPropertyChangeListener, removePropertyChangeListener
 

Field Detail

SLOPESHADING

public static final int SLOPESHADING
Gray scale slope shading, sun from the Northwest.

See Also:
Constant Field Values

COLOREDSHADING

public static final int COLOREDSHADING
Colorized slope shading. Color bands are based on elevation, and are accented by shaded indications.

See Also:
Constant Field Values

DEFAULT_SLOPE_ADJUST

public static final int DEFAULT_SLOPE_ADJUST
Default contrast setting for slope shading.

See Also:
Constant Field Values

DEFAULT_MINUTE_SPACING

public static final int DEFAULT_MINUTE_SPACING
Default minute spacing

See Also:
Constant Field Values

DEFAULT_OPAQUENESS

public static final int DEFAULT_OPAQUENESS
for colorizing

See Also:
Constant Field Values

path

protected java.lang.String path
The paths to the ETOPO directory, telling where the data is.


dataBuffer

protected short[] dataBuffer
The etopo elevation data


bufferWidth

protected int bufferWidth

bufferHeight

protected int bufferHeight

minuteSpacing

protected int minuteSpacing
The current resolution (in minutes)


etopoFileNames

protected static final java.lang.String[] etopoFileNames
ETOPO elevation files


etopoWidths

protected static final int[] etopoWidths
dimensions of the ETOPO files (don't mess with these!)


etopoHeights

protected static final int[] etopoHeights

etopoSpacings

protected double[] etopoSpacings
Spacings (in meters) between adjacent lon points at the equator. The values here were aesthetically defined (they are not the actual spacings)


viewType

protected int viewType
The display type for the etopo images. Slope shading is grayscale terrain modeling with highlights and shading, with the 'sun' being in the NorthWest. Colored Elevation shading is the same thing, except colors are added to indicate the elevation. Band shading colors the pixels according to a range of elevations.


bandHeight

protected int bandHeight
The elevation range to use for each color in band shading.


slopeAdjust

protected int slopeAdjust
A contrast adjustment, for slope shading (1-5).


opaqueness

protected int opaqueness
transparency control


spacer

protected int spacer
Number of pixel spacers that should be added to a data file, per line, to adjust for skewing.


ETOPOPathProperty

public static final java.lang.String ETOPOPathProperty
property suffixes

See Also:
Constant Field Values

OpaquenessProperty

public static final java.lang.String OpaquenessProperty
See Also:
Constant Field Values

ETOPOViewTypeProperty

public static final java.lang.String ETOPOViewTypeProperty
See Also:
Constant Field Values

ETOPOSlopeAdjustProperty

public static final java.lang.String ETOPOSlopeAdjustProperty
See Also:
Constant Field Values

ETOPOMinuteSpacingProperty

public static final java.lang.String ETOPOMinuteSpacingProperty
See Also:
Constant Field Values

ETOPOPixelSpacerProperty

public static final java.lang.String ETOPOPixelSpacerProperty
See Also:
Constant Field Values

slopeMap

protected byte[] slopeMap
Holds the slope values, updated when the resolution changes or the slope adjustment (contrast) is changed. Slope values are scaled between -127 to 127.


elevLimit

protected int[] elevLimit
elevation bands


elevLimitCnt

protected int elevLimitCnt
number of elevation bands


redElev

protected int[] redElev
elevation band colors (one for each elevation band)


greenElev

protected int[] greenElev

blueElev

protected int[] blueElev

slopeColors

protected java.awt.Color[][] slopeColors
for slope shading colors, indexed by elevation band then slope


slopeReset

protected boolean slopeReset

spacingReset

protected boolean spacingReset

paletteBox

protected javax.swing.Box paletteBox
The user interface palette for the ETOPO layer.

Constructor Detail

ETOPOLayer

public ETOPOLayer()
The default constructor for the Layer. All of the attributes are set to their default values.


ETOPOLayer

public ETOPOLayer(java.lang.String pathToETOPODir)
The default constructor for the Layer. All of the attributes are set to their default values.

Parameters:
pathToETOPODir - path to the directory holding the ETOPO data
Method Detail

setPath

public void setPath(java.lang.String pathToETOPODir)

setDefaultValues

protected void setDefaultValues()

getElevIndex

protected int getElevIndex(short el)

getColor

protected java.awt.Color getColor(short elevation,
                                  byte slopeVal)

setProperties

public void setProperties(java.lang.String prefix,
                          java.util.Properties properties)
Set all the ETOPO properties from a properties object.

Specified by:
setProperties in interface PropertyConsumer
Overrides:
setProperties in class OMGraphicHandlerLayer
Parameters:
prefix - the token to prefix the property names
properties - the Properties object

buildSlopeMap

protected void buildSlopeMap()
Builds the slope index map. This method is called when the ETOPO resolution changes and when the slope contrast changes. The slope of the terrain is clipped; slopes are between the range of +/- 45 deg. The calculated slope value is then linearly scaled to the range +/- 127.


loadBuffer

protected void loadBuffer()
Loads the database from the appropriate file based on the current resolution. The data files are in INTEL format (must call BinaryBufferedFile.byteOrder(true)).


buildRaster

protected OMRaster buildRaster()

prepare

public OMGraphicList prepare()
Prepares the graphics for the layer. This is where the getRectangle() method call is made on the etopo.

Occasionally it is necessary to abort a prepare call. When this happens, the map will set the cancel bit in the LayerThread, (the thread that is running the prepare). If this Layer needs to do any cleanups during the abort, it should do so, but return out of the prepare asap.

Overrides:
prepare in class OMGraphicHandlerLayer

getGUI

public java.awt.Component getGUI()
Creates the interface palette.

Overrides:
getGUI in class Layer
Returns:
java.awt.Component or null, null by default.

actionPerformed

public void actionPerformed(java.awt.event.ActionEvent e)
Used just for the redraw button.

Specified by:
actionPerformed in interface java.awt.event.ActionListener
Overrides:
actionPerformed in class OMGraphicHandlerLayer


Copyright (C) BBNT Solutions LLC; See http://openmap.bbn.com/ for details