org.openstreetmap.gui.jmapviewer
Class JMapViewer

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by org.openstreetmap.gui.jmapviewer.JMapViewer
All Implemented Interfaces:
java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, TileLoaderListener
Direct Known Subclasses:
SlippyMapChooser

public class JMapViewer
extends javax.swing.JPanel
implements TileLoaderListener

Provides a simple panel that displays pre-rendered map tiles loaded from the OpenStreetMap project.

Author:
Jan Peter Stotz
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
 
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  java.awt.Point center
          x- and y-position of the center of this map-panel on the world map denoted in screen pixel regarding the current zoom level.
(package private)  JobDispatcher jobDispatcher
           
protected  java.util.List<MapMarker> mapMarkerList
           
protected  boolean mapMarkersVisible
           
static int MAX_ZOOM
           
static int MIN_ZOOM
           
protected static java.awt.Point[] move
          Vectors for clock-wise tile painting
private static long serialVersionUID
           
protected  TileCache tileCache
           
protected  boolean tileGridVisible
           
protected  TileLoader tileLoader
           
protected  TileSource tileSource
           
protected  int zoom
          Current zoom level
protected  javax.swing.JButton zoomInButton
           
protected  javax.swing.JButton zoomOutButton
           
protected  javax.swing.JSlider zoomSlider
           
 
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 java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
JMapViewer()
          Creates a standard JMapViewer instance that can be controlled via mouse: hold right mouse button for moving, double click left mouse button or use mouse wheel for zooming.
JMapViewer(TileCache tileCache, int downloadThreadCount)
           
 
Method Summary
 void addMapMarker(MapMarker marker)
           
 java.util.List<MapMarker> getMapMarkerList()
           
 boolean getMapMarkersVisible()
           
 java.awt.Point getMapPosition(double lat, double lon)
          Calculates the position on the map of a given coordinate
 java.awt.geom.Point2D.Double getPosition()
           
 java.awt.geom.Point2D.Double getPosition(java.awt.Point mapPoint)
           
protected  Tile getTile(int tilex, int tiley, int zoom)
          retrieves a tile from the cache.
 TileCache getTileCache()
           
 TileSource getTileLayerSource()
           
 TileLoader getTileLoader()
           
 TileSource getTileSource()
           
 int getZoom()
           
 boolean getZoomContolsVisible()
           
protected  void initializeZoomSlider()
           
 boolean isTileGridVisible()
           
 void moveMap(int x, int y)
          Moves the visible map pane.
protected  void paintComponent(java.awt.Graphics g)
           
 void setDisplayPosition(int x, int y, int zoom)
           
 void setDisplayPosition(java.awt.Point mapPoint, int x, int y, int zoom)
           
 void setDisplayPositionByLatLon(double lat, double lon, int zoom)
          Changes the map pane so that it is centered on the specified coordinate at the given zoom level.
 void setDisplayPositionByLatLon(java.awt.Point mapPoint, double lat, double lon, int zoom)
          Changes the map pane so that the specified coordinate at the given zoom level is displayed on the map at the screen coordinate mapPoint.
 void setDisplayToFitMapMarkers()
          Sets the displayed map pane and zoom level so that all map markers are visible.
 void setMapMarkerList(java.util.List<MapMarker> mapMarkerList)
           
 void setMapMarkerVisible(boolean mapMarkersVisible)
          Enables or disables painting of the MapMarker
 void setTileGridVisible(boolean tileGridVisible)
           
 void setTileLoader(TileLoader tileLoader)
           
 void setTileSource(TileSource tileSource)
           
 void setZoom(int zoom)
           
 void setZoom(int zoom, java.awt.Point mapPoint)
           
 void setZoomContolsVisible(boolean visible)
           
 void tileLoadingFinished(Tile tile, boolean success)
          Will be called if a new Tile has been loaded successfully.
protected  void zoomChanged(int oldZoom)
          Every time the zoom level changes this method is called.
 void zoomIn()
          Increases the current zoom level by one
 void zoomIn(java.awt.Point mapPoint)
          Increases the current zoom level by one
 void zoomOut()
          Decreases the current zoom level by one
 void zoomOut(java.awt.Point mapPoint)
          Decreases the current zoom level by one
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
 
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, 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, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, 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, setVisible, unregisterKeyboardAction, update
 
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, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, 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, removeComponentListener, 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, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

serialVersionUID

private static final long serialVersionUID
See Also:
Constant Field Values

move

protected static final java.awt.Point[] move
Vectors for clock-wise tile painting


MAX_ZOOM

public static final int MAX_ZOOM
See Also:
Constant Field Values

MIN_ZOOM

public static final int MIN_ZOOM
See Also:
Constant Field Values

tileLoader

protected TileLoader tileLoader

tileCache

protected TileCache tileCache

tileSource

protected TileSource tileSource

mapMarkerList

protected java.util.List<MapMarker> mapMarkerList

mapMarkersVisible

protected boolean mapMarkersVisible

tileGridVisible

protected boolean tileGridVisible

center

protected java.awt.Point center
x- and y-position of the center of this map-panel on the world map denoted in screen pixel regarding the current zoom level.


zoom

protected int zoom
Current zoom level


zoomSlider

protected javax.swing.JSlider zoomSlider

zoomInButton

protected javax.swing.JButton zoomInButton

zoomOutButton

protected javax.swing.JButton zoomOutButton

jobDispatcher

JobDispatcher jobDispatcher
Constructor Detail

JMapViewer

public JMapViewer()
Creates a standard JMapViewer instance that can be controlled via mouse: hold right mouse button for moving, double click left mouse button or use mouse wheel for zooming. Loaded tiles are stored the MemoryTileCache and the tile loader uses 4 parallel threads for retrieving the tiles.


JMapViewer

public JMapViewer(TileCache tileCache,
                  int downloadThreadCount)
Method Detail

initializeZoomSlider

protected void initializeZoomSlider()

setDisplayPositionByLatLon

public void setDisplayPositionByLatLon(double lat,
                                       double lon,
                                       int zoom)
Changes the map pane so that it is centered on the specified coordinate at the given zoom level.

Parameters:
lat - latitude of the specified coordinate
lon - longitude of the specified coordinate
zoom - MIN_ZOOM <= zoom level <= MAX_ZOOM

setDisplayPositionByLatLon

public void setDisplayPositionByLatLon(java.awt.Point mapPoint,
                                       double lat,
                                       double lon,
                                       int zoom)
Changes the map pane so that the specified coordinate at the given zoom level is displayed on the map at the screen coordinate mapPoint.

Parameters:
mapPoint - point on the map denoted in pixels where the coordinate should be set
lat - latitude of the specified coordinate
lon - longitude of the specified coordinate
zoom - MIN_ZOOM <= zoom level <= TileSource.getMaxZoom()

setDisplayPosition

public void setDisplayPosition(int x,
                               int y,
                               int zoom)

setDisplayPosition

public void setDisplayPosition(java.awt.Point mapPoint,
                               int x,
                               int y,
                               int zoom)

setDisplayToFitMapMarkers

public void setDisplayToFitMapMarkers()
Sets the displayed map pane and zoom level so that all map markers are visible.


getPosition

public java.awt.geom.Point2D.Double getPosition()

getPosition

public java.awt.geom.Point2D.Double getPosition(java.awt.Point mapPoint)

getMapPosition

public java.awt.Point getMapPosition(double lat,
                                     double lon)
Calculates the position on the map of a given coordinate

Parameters:
lat -
lon -
Returns:
point on the map or null if the point is not visible

paintComponent

protected void paintComponent(java.awt.Graphics g)
Overrides:
paintComponent in class javax.swing.JComponent

moveMap

public void moveMap(int x,
                    int y)
Moves the visible map pane.

Parameters:
x - horizontal movement in pixel.
y - vertical movement in pixel

getZoom

public int getZoom()
Returns:
the current zoom level

zoomIn

public void zoomIn()
Increases the current zoom level by one


zoomIn

public void zoomIn(java.awt.Point mapPoint)
Increases the current zoom level by one


zoomOut

public void zoomOut()
Decreases the current zoom level by one


zoomOut

public void zoomOut(java.awt.Point mapPoint)
Decreases the current zoom level by one


setZoom

public void setZoom(int zoom,
                    java.awt.Point mapPoint)

setZoom

public void setZoom(int zoom)

getTile

protected Tile getTile(int tilex,
                       int tiley,
                       int zoom)
retrieves a tile from the cache. If the tile is not present in the cache a load job is added to the working queue of JobDispatcher.JobThread.

Parameters:
tilex -
tiley -
zoom -
Returns:
specified tile from the cache or null if the tile was not found in the cache.

zoomChanged

protected void zoomChanged(int oldZoom)
Every time the zoom level changes this method is called. Override it in derived implementations for adapting zoom dependent values. The new zoom level can be obtained via getZoom().

Parameters:
oldZoom - the previous zoom level

isTileGridVisible

public boolean isTileGridVisible()

setTileGridVisible

public void setTileGridVisible(boolean tileGridVisible)

getMapMarkersVisible

public boolean getMapMarkersVisible()

setMapMarkerVisible

public void setMapMarkerVisible(boolean mapMarkersVisible)
Enables or disables painting of the MapMarker

Parameters:
mapMarkersVisible -
See Also:
addMapMarker(MapMarker), getMapMarkerList()

setMapMarkerList

public void setMapMarkerList(java.util.List<MapMarker> mapMarkerList)

getMapMarkerList

public java.util.List<MapMarker> getMapMarkerList()

addMapMarker

public void addMapMarker(MapMarker marker)

setZoomContolsVisible

public void setZoomContolsVisible(boolean visible)

getZoomContolsVisible

public boolean getZoomContolsVisible()

getTileCache

public TileCache getTileCache()
Specified by:
getTileCache in interface TileLoaderListener

getTileLoader

public TileLoader getTileLoader()

setTileLoader

public void setTileLoader(TileLoader tileLoader)

getTileLayerSource

public TileSource getTileLayerSource()

getTileSource

public TileSource getTileSource()

setTileSource

public void setTileSource(TileSource tileSource)

tileLoadingFinished

public void tileLoadingFinished(Tile tile,
                                boolean success)
Description copied from interface: TileLoaderListener
Will be called if a new Tile has been loaded successfully. Loaded can mean downloaded or loaded from file cache.

Specified by:
tileLoadingFinished in interface TileLoaderListener