Class ETOPOLayer

  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.util.EventListener
Direct Known Subclasses:

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

# Number between 0-255: 0 is transparent, 255 is opaque

# Number of colors to use on the maps - 16, 32, 216

# Type of display for the data
# 0 = grayscale slope shading
# 1 = colored slope shading

# Contrast setting, 1-5

# lat/lon spacing in minutes
# must be 5, 10, or 15

# End of properties for ETOPOLayer

See Also:
Serialized Form

Nested Class Summary
Nested classes/interfaces inherited from class javax.swing.JComponent
Nested classes/interfaces inherited from class java.awt.Container
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
          Colorized slope shading.
protected  short[] dataBuffer
          The etopo elevation data
          Default minute spacing
          for colorizing
          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
          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
Fields inherited from class java.awt.Component
Fields inherited from interface com.bbn.openmap.PropertyConsumer
EditorProperty, initPropertiesProperty, LabelEditorProperty, ScopedEditorProperty
Fields inherited from interface java.awt.image.ImageObserver
Constructor Summary
          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


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

See Also:
Constant Field Values


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


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

See Also:
Constant Field Values


public static final int DEFAULT_MINUTE_SPACING
Default minute spacing

See Also:
Constant Field Values


public static final int DEFAULT_OPAQUENESS
for colorizing

See Also:
Constant Field Values


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


protected short[] dataBuffer
The etopo elevation data


protected int bufferWidth


protected int bufferHeight


protected int minuteSpacing
The current resolution (in minutes)


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


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


protected static final int[] etopoHeights


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)


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.


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


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


protected int opaqueness
transparency control


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


public static final java.lang.String ETOPOPathProperty
property suffixes

See Also:
Constant Field Values


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


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


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


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


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


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.


protected int[] elevLimit
elevation bands


protected int elevLimitCnt
number of elevation bands


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


protected int[] greenElev


protected int[] blueElev


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


protected boolean slopeReset


protected boolean spacingReset


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

Constructor Detail


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


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

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


public void setPath(java.lang.String pathToETOPODir)


protected void setDefaultValues()


protected int getElevIndex(short el)


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


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
setProperties in class OMGraphicHandlerLayer
prefix - the token to prefix the property names
properties - the Properties object


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.


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)).


protected OMRaster buildRaster()


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.

prepare in class OMGraphicHandlerLayer


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

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


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

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

Copyright (C) BBNT Solutions LLC; See for details