[Schmitzm-commits] r1791 - in trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools: . gui
scm-commit@wald.intevation.org
scm-commit at wald.intevation.org
Mon Nov 21 20:10:28 CET 2011
Author: alfonx
Date: 2011-11-21 20:10:28 +0100 (Mon, 21 Nov 2011)
New Revision: 1791
Modified:
trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java
trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/XMapPane.java
Log:
gt 2.7.3
Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java 2011-11-21 18:27:34 UTC (rev 1790)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/GTUtil.java 2011-11-21 19:10:28 UTC (rev 1791)
@@ -93,7 +93,7 @@
* Holds the renderer type instantiated by {@link GTUtil#createGTRenderer()}
* .
*/
- private static GTRendererType rendererType = GTRendererType.ShapefileRenderer;
+ private static GTRendererType rendererType = GTRendererType.StreamingRenderer;
/** Konstante fuer das CRS "WGS84" (erzeugt als "EPSG:4326") */
public static CoordinateReferenceSystem WGS84 = null;
Modified: trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/XMapPane.java
===================================================================
--- trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/XMapPane.java 2011-11-21 18:27:34 UTC (rev 1790)
+++ trunk/schmitzm-gt/src/main/java/de/schmitzm/geotools/gui/XMapPane.java 2011-11-21 19:10:28 UTC (rev 1791)
@@ -89,27 +89,23 @@
import de.schmitzm.swing.event.MouseInputType;
/**
- * The {@link XMapPane} class uses a Geotools {@link GTRenderer} to paint up to
- * two {@link MapContext}s: a "local" {@link MapContext} and a "background"
- * {@link MapContext}. The idea is, that rendering a background layer made up of
+ * The {@link XMapPane} class uses a Geotools {@link GTRenderer} to paint up to two {@link MapContext}s: a "local"
+ * {@link MapContext} and a "background" {@link MapContext}. The idea is, that rendering a background layer made up of
* e.g. OSM data, may take much longer than rendering local data.<br>
- * Every {@link MapContext} is rendered on a {@link Thread} of it's own.
- * Starting/ cancelling these threads is done by the {@link RenderingExecutor}.<br>
+ * Every {@link MapContext} is rendered on a {@link Thread} of it's own. Starting/ cancelling these threads is done by
+ * the {@link RenderingExecutor}.<br>
* <br>
* While the renderers are rending the map, a <br>
- * The {@link XMapPane} is based on schmitzm {@link JPanel}, so
- * {@link #print(Graphics)} will automatically set the background of components
- * to pure white.
+ * The {@link XMapPane} is based on schmitzm {@link JPanel}, so {@link #print(Graphics)} will automatically set the
+ * background of components to pure white.
*
* The XMapPane has a {@link MouseListener} that manages zooming.<br>
- * A logo/icon to float in the lower left corner may be set with
- * {@link #setMapImage(BufferedImage)}<br>
+ * A logo/icon to float in the lower left corner may be set with {@link #setMapImage(BufferedImage)}<br>
*
- * It is recommended to execute {@link #dispose()} when not using the
- * {@link XMapPane} instance anymore, as this way resources are released faster.
+ * It is recommended to execute {@link #dispose()} when not using the {@link XMapPane} instance anymore, as this way
+ * resources are released faster.
*
- * @see SelectableXMapPane - an extension of {@link XMapPane} that supports
- * selecting features.
+ * @see SelectableXMapPane - an extension of {@link XMapPane} that supports selecting features.
*
*/
public class XMapPane extends JPanel {
@@ -118,8 +114,8 @@
private CoordinateReferenceSystem forceCrs;
/**
- * //TODO still unused Allows to set a CRS that should be used for the
- * {@link MapContext}, no matter which CRS the bottom layer has.
+ * //TODO still unused Allows to set a CRS that should be used for the {@link MapContext}, no matter which CRS the
+ * bottom layer has.
*/
public void setForceCrs(CoordinateReferenceSystem crs) {
forceCrs = crs;
@@ -132,8 +128,7 @@
}
/**
- * Allows to set a CRS that should be used for the {@link MapContext}, no
- * matter which CRS the bottom layer has.
+ * Allows to set a CRS that should be used for the {@link MapContext}, no matter which CRS the bottom layer has.
*/
public CoordinateReferenceSystem getForceCrs() {
return forceCrs;
@@ -147,14 +142,11 @@
}
/**
- * If {@link #maxExtend} is <code>null</code> the following rules are used
- * to create a default maximum.
+ * If {@link #maxExtend} is <code>null</code> the following rules are used to create a default maximum.
* <ul>
- * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no
- * margin</li>
+ * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no margin</li>
* <li>Values 0 : grow to fit the monitors aspect ratio, no margin</li>
- * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a
- * relative margin</li>
+ * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a relative margin</li>
* </ul>
* **/
private double defaultMaxMapExtendMode = .05;
@@ -169,8 +161,7 @@
}
/**
- * If the {@link JPanel} is disabled, it shows nothing and the images are
- * disposed.
+ * If the {@link JPanel} is disabled, it shows nothing and the images are disposed.
*/
@Override
public void setEnabled(boolean enabled) {
@@ -186,21 +177,20 @@
private final static Logger LOGGER = Logger.getLogger(XMapPane.class);
/**
- * A flag indicating whether the {@link XMapPane} is accepting repaints from
- * the EDT. @see {@link XMapPane#setPainting(boolean))
+ * A flag indicating whether the {@link XMapPane} is accepting repaints from the EDT. @see
+ * {@link XMapPane#setPainting(boolean))
**/
private boolean acceptsRepaintCalls = true;
/**
- * Main {@link MapContext} that holds all layers that are rendered into the
- * {@link #localImage} by the {@link #localRenderer}
+ * Main {@link MapContext} that holds all layers that are rendered into the {@link #localImage} by the
+ * {@link #localRenderer}
*/
MapContext localContext;
/**
- * {@link MapContext} holding the background layers. Use it for layers that
- * CAN take very long for rendering, like layer from the Internet: WMS, WFS,
- * OSM...<br>
+ * {@link MapContext} holding the background layers. Use it for layers that CAN take very long for rendering, like
+ * layer from the Internet: WMS, WFS, OSM...<br>
* <code>null</code> by default.
*
* @see #setBgContext(MapContext)
@@ -209,9 +199,8 @@
MapContext bgContext;
/**
- * While threads are working, calls {@link XMapPane#updateFinalImage()}
- * regularly and {@link #repaint()}. This {@link Timer} is stopped when all
- * renderers have finished.
+ * While threads are working, calls {@link XMapPane#updateFinalImage()} regularly and {@link #repaint()}. This
+ * {@link Timer} is stopped when all renderers have finished.
*
* @see INITIAL_REPAINT_DELAYAL
* @see #REPEATING_REPAINT_DELAY
@@ -219,31 +208,28 @@
final private Timer repaintTimer;
/**
- * The initial delay in milliseconds until the {@link #finalImage} is
- * updated the first time.
+ * The initial delay in milliseconds until the {@link #finalImage} is updated the first time.
*/
public static final int INITIAL_REPAINT_DELAY = 900;
/**
- * While the {@link #bgExecuter} and {@link #localExecuter} are rendering,
- * the {@link #repaintTimer} is regularly updating the {@link #finalImage}
- * with previews.
+ * While the {@link #bgExecuter} and {@link #localExecuter} are rendering, the {@link #repaintTimer} is regularly
+ * updating the {@link #finalImage} with previews.
*/
public static final int REPEATING_REPAINT_DELAY = 500;
/**
- * Default delay (milliseconds) before the map will be redrawn when resizing
- * the pane. This is to avoid flickering while drag-resizing.
+ * Default delay (milliseconds) before the map will be redrawn when resizing the pane. This is to avoid flickering
+ * while drag-resizing.
*
* @see #resizeTimer
*/
public static final int DEFAULT_RESIZING_PAINT_DELAY = 600;
/**
- * This not-repeating {@link Timer} is re-started whenever the component is
- * resized. That means => only if the component is not resizing for
- * {@link #DEFAULT_RESIZING_PAINT_DELAY} milliseconds, does the
- * {@link XMapPane} react.
+ * This not-repeating {@link Timer} is re-started whenever the component is resized. That means => only if the
+ * component is not resizing for {@link #DEFAULT_RESIZING_PAINT_DELAY} milliseconds, does the {@link XMapPane}
+ * react.
*/
private final Timer resizeTimer;
@@ -290,22 +276,19 @@
final static Font errorFont = new Font("Arial", Font.BOLD, 13);
/**
- * If last average last two renderings took more than that many ms, show the
- * user a scaled preview
+ * If last average last two renderings took more than that many ms, show the user a scaled preview
**/
private static final long PRESCALE_MINTIME = 230;
/**
- * The wait message painted into the map while rendering is going on on
- * another thread.
+ * The wait message painted into the map while rendering is going on on another thread.
*
* @see #addGadgets(Graphics2D, boolean)
*/
final String waitMsg = SwingUtil.R("WaitMess");
/**
- * Konvertiert die Maus-Koordinaten (relativ zum <code>JMapPane</code>) in
- * Karten-Koordinaten.
+ * Konvertiert die Maus-Koordinaten (relativ zum <code>JMapPane</code>) in Karten-Koordinaten.
*
* @param e
* Maus-Ereignis
@@ -316,9 +299,7 @@
try {
return ((MapMouseEvent) e).getMapPosition();
} catch (final Exception err) {
- LOGGER.error(
- "return ((GeoMouseEvent) e).getMapCoordinate(null).toPoint2D();",
- err);
+ LOGGER.error("return ((GeoMouseEvent) e).getMapCoordinate(null).toPoint2D();", err);
}
// aktuelle Geo-Position ueber Transformation des JMapPane berechnen
@@ -332,19 +313,16 @@
final AffineTransform at = xMapPane.getScreenToWorld();
if (at != null) {
Point2D transformed = at.transform(e.getPoint(), null);
- return new DirectPosition2D(xMapPane.getMapContext()
- .getCoordinateReferenceSystem(), transformed.getX(),
- transformed.getY());
+ return new DirectPosition2D(xMapPane.getMapContext().getCoordinateReferenceSystem(),
+ transformed.getX(), transformed.getY());
}
return null;
}
- throw new IllegalArgumentException(
- "MouseEvent has to be of instance MapMouseEvent or come from an XMapPane");
+ throw new IllegalArgumentException("MouseEvent has to be of instance MapMouseEvent or come from an XMapPane");
}
/**
- * Listens to changes of the "background" {@link MapContext} and triggers
- * repaints where needed.
+ * Listens to changes of the "background" {@link MapContext} and triggers repaints where needed.
*/
private final MapLayerListListener bgContextListener = new MapLayerListListener() {
@@ -371,41 +349,38 @@
event.getLayer().removeMapLayerListener(bgMapLayerListener);
requestStartRendering();
}
-
-// @Override
-// public void layerPreDispose(MapLayerListEvent event) {
-// // New by Stefan Tzeggai 12.9.11: GT8 Migration
-// }
+
+ // @Override
+ // public void layerPreDispose(MapLayerListEvent event) {
+ // // New by Stefan Tzeggai 12.9.11: GT8 Migration
+ // }
};
/**
- * This {@link RenderingExecutor} manages the creation and cancellation of
- * up to one {@link Thread} for rendering the {@link #localContext}.
+ * This {@link RenderingExecutor} manages the creation and cancellation of up to one {@link Thread} for rendering
+ * the {@link #localContext}.
*/
private final RenderingExecutor localExecuter = new RenderingExecutor(this);
/**
- * This {@link RenderingExecutor} manages the creation and cancellation of
- * up to one {@link Thread} for rendering the {@link #bgContext}.
+ * This {@link RenderingExecutor} manages the creation and cancellation of up to one {@link Thread} for rendering
+ * the {@link #bgContext}.
*/
protected RenderingExecutor bgExecuter;
/**
- * The {@link #localRenderer} for the {@link #localContext} uses this
- * {@link Image}.
+ * The {@link #localRenderer} for the {@link #localContext} uses this {@link Image}.
*/
private BufferedImage localImage;
/**
- * The {@link #bgRenderer} for the {@link #bgContext} uses this
- * {@link Image}.
+ * The {@link #bgRenderer} for the {@link #bgContext} uses this {@link Image}.
*/
private BufferedImage bgImage;
/**
- * This {@link Image} is a merge of the {@link #bgImage},
- * {@link #localImage} and {@link #addGadgets(Graphics2D, boolean)}. It is
- * updated with {@link #updateFinalImage()} and used for painting in
+ * This {@link Image} is a merge of the {@link #bgImage}, {@link #localImage} and
+ * {@link #addGadgets(Graphics2D, boolean)}. It is updated with {@link #updateFinalImage()} and used for painting in
* {@link #paintComponent(Graphics)}
*/
private BufferedImage finalImage;
@@ -421,8 +396,7 @@
private LogoPosition mapImagePos = LogoPosition.BOTTOMRIGHT;
/**
- * Listens to each layer in the local {@link MapContext} for changes and
- * triggers repaints.
+ * Listens to each layer in the local {@link MapContext} for changes and triggers repaints.
*/
protected MapLayerListener bgMapLayerListener = new MapLayerAdapter() {
@@ -443,30 +417,27 @@
};
/**
- * A flag indicating if dispose() was already called. If true, then further
- * use of this {@link SelectableXMapPane} is undefined.
+ * A flag indicating if dispose() was already called. If true, then further use of this {@link SelectableXMapPane}
+ * is undefined.
*/
private boolean disposed = false;
/**
- * While dragging, the {@link #updateFinalImage()} method is translating the
- * cached images while setting it together.
+ * While dragging, the {@link #updateFinalImage()} method is translating the cached images while setting it
+ * together.
**/
private final Point imageOrigin = new Point(0, 0);
/**
- * For every rendering thread started,
- * {@link GTUtil#createGTRenderer(MapContext)} is called to create a new
- * renderer. These Java2D rendering hints are passed to the
- * {@link GTRenderer}. The java2dHints are the same for all renderers (bg
- * and local).
+ * For every rendering thread started, {@link GTUtil#createGTRenderer(MapContext)} is called to create a new
+ * renderer. These Java2D rendering hints are passed to the {@link GTRenderer}. The java2dHints are the same for all
+ * renderers (bg and local).
*/
private RenderingHints java2dHints;
protected LabelCache labelCache = new LabelCacheImpl();
/**
- * Listens to changes of the "local" {@link MapContext} and triggers
- * repaints where needed.
+ * Listens to changes of the "local" {@link MapContext} and triggers repaints where needed.
*/
private final MapLayerListListener localContextListener = new MapLayerListListener() {
@@ -500,16 +471,15 @@
requestStartRendering();
}
-// @Override
-// public void layerPreDispose(MapLayerListEvent arg0) {
-// // New by Stefan Tzeggai 12.9.11: GT8 Migration
-// }
+ // @Override
+ // public void layerPreDispose(MapLayerListEvent arg0) {
+ // // New by Stefan Tzeggai 12.9.11: GT8 Migration
+ // }
};
/**
- * Listens to each layer in the local {@link MapContext} for changes and
- * triggers repaints. We don't have to listen layerChanged, because that is
- * already done in {@link #localContextListener}
+ * Listens to each layer in the local {@link MapContext} for changes and triggers repaints. We don't have to listen
+ * layerChanged, because that is already done in {@link #localContextListener}
*/
protected MapLayerListener localMapLayerListener = new MapLayerAdapter() {
@@ -541,10 +511,8 @@
protected Envelope mapArea = null;
/**
- * A flag set it {@link #setMapArea(Envelope)} to indicated the
- * {@link #paintComponent(Graphics)} method, that the image on-screen is
- * associated with {@link #oldMapArea} and may hence be scaled for a quick
- * preview.<br>
+ * A flag set it {@link #setMapArea(Envelope)} to indicated the {@link #paintComponent(Graphics)} method, that the
+ * image on-screen is associated with {@link #oldMapArea} and may hence be scaled for a quick preview.<br>
* The flag is reset
**/
private boolean mapAreaChanged = false;
@@ -555,15 +523,13 @@
private Color mapBackgroundColor = null;
/**
- * A flag indicating that the shown image is invalid and needs to be
- * re-rendered.
+ * A flag indicating that the shown image is invalid and needs to be re-rendered.
*/
protected boolean mapImageInvalid = true;
/**
- * Holds a flag for each layer, whether it is regarded or ignored on
- * {@link #SELECT_TOP}, {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP}
- * actions.
+ * Holds a flag for each layer, whether it is regarded or ignored on {@link #SELECT_TOP}, {@link #SELECT_ALL} and
+ * {@link #SELECT_ONE_FROM_TOP} actions.
*/
final protected HashMap<MapLayer, Boolean> mapLayerSelectable = new HashMap<MapLayer, Boolean>();
@@ -572,8 +538,7 @@
*/
protected Vector<JMapPaneListener> mapPaneListeners = new Vector<JMapPaneListener>();
/**
- * If not <code>null</code>, the {@link XMapPane} will not allow to zoom/pan
- * out of that area
+ * If not <code>null</code>, the {@link XMapPane} will not allow to zoom/pan out of that area
**/
private Envelope maxExtend = null;
private Double maxZoomScale = Double.MIN_VALUE;
@@ -581,20 +546,17 @@
private Double minZoomScale = Double.MAX_VALUE;
/**
- * We store the old mapArea for a moment to use it for the
- * "quick scaled preview" in case of ZoomOut
+ * We store the old mapArea for a moment to use it for the "quick scaled preview" in case of ZoomOut
**/
protected Envelope oldMapArea = null;
/**
- * We store the old transform for a moment to use it for the
- * "quick scaled preview" in case of ZoomIn
+ * We store the old transform for a moment to use it for the "quick scaled preview" in case of ZoomIn
**/
protected AffineTransform oldScreenToWorld = null;
/**
- * A flag indicating, that the image size has changed and the buffered
- * images are not big enough any more
+ * A flag indicating, that the image size has changed and the buffered images are not big enough any more
**/
protected boolean paneResized = true;
@@ -603,25 +565,21 @@
// ** if 0, no quick preview will be shown **/
// private int quickPreviewHint = 0;
- private Map<Object, Object> rendererHints = GTUtil
- .getDefaultGTRendererHints(getLocalRenderer());
+ private Map<Object, Object> rendererHints = GTUtil.getDefaultGTRendererHints(getLocalRenderer());
/**
- * If set to <code>true</code>, the {@link #startRenderThreadsTimer} will
- * start rendering {@link Thread}s
+ * If set to <code>true</code>, the {@link #startRenderThreadsTimer} will start rendering {@link Thread}s
**/
private volatile Boolean requestStartRendering = false;
/**
- * Transformation zwischen Fenster-Koordinaten und Karten-Koordinaten
- * (lat/lon)
+ * Transformation zwischen Fenster-Koordinaten und Karten-Koordinaten (lat/lon)
*/
protected AffineTransform screenToWorld = null;
/**
- * The flag {@link #requestStartRendering} can be set to true by events.
- * This {@link Timer} checks the flag regularly and starts one renderer
- * thread.
+ * The flag {@link #requestStartRendering} can be set to true by events. This {@link Timer} checks the flag
+ * regularly and starts one renderer thread.
*/
final private Timer startRenderThreadsTimer;
@@ -630,21 +588,18 @@
/**
* This {@link MouseListener} is managing all zoom related tasks
*/
- private final XMapPaneMouseListener xMapPaneMouseListener = new XMapPaneMouseListener(
- this);
+ private final XMapPaneMouseListener xMapPaneMouseListener = new XMapPaneMouseListener(this);
/** Is set if a renderer has an error **/
protected ArrayList<Exception> renderingErrors = new ArrayList<Exception>();
/**
- * If <code>true</code>, then rendering exceptions are rendererd into the
- * map pane
+ * If <code>true</code>, then rendering exceptions are rendererd into the map pane
**/
private boolean showExceptions = false;
/**
- * Change the render language of this XMapPane when the translation is
- * changed.
+ * Change the render language of this XMapPane when the translation is changed.
*/
private final PropertyChangeListener activeLanguageChangeListener = new PropertyChangeListener() {
@@ -668,16 +623,14 @@
* full constructor extending JPanel
*
* @param rendererHints
- * may be <code>null</code>. Otherwise a {@link Map<Object,
- * Object>} of {@link RenderingHints} to override the default
- * from {@link GTUtil#getDefaultGTRendererHints(GTRenderer)}
+ * may be <code>null</code>. Otherwise a {@link Map<Object, Object>} of {@link RenderingHints} to
+ * override the default from {@link GTUtil#getDefaultGTRendererHints(GTRenderer)}
*
* @param localContext
- * The main {@link MapContext} to use. If <code>null</code>, an
- * empty {@link DefaultMapContext} will be created.
+ * The main {@link MapContext} to use. If <code>null</code>, an empty {@link DefaultMapContext} will be
+ * created.
*/
- public XMapPane(final MapContext localContext_,
- final Map<Object, Object> rendererHints) {
+ public XMapPane(final MapContext localContext_, final Map<Object, Object> rendererHints) {
super(true);
@@ -708,42 +661,41 @@
setTool(XMapPaneTool.ZOOM_IN);
/*
- * We use a Timer object to avoid rendering delays and flickering when
- * the user is drag-resizing the parent container of this map pane.
+ * We use a Timer object to avoid rendering delays and flickering when the user is drag-resizing the parent
+ * container of this map pane.
*
- * Using a ComponentListener doesn't work because, unlike a JFrame, the
- * pane receives a stream of events during drag-resizing.
+ * Using a ComponentListener doesn't work because, unlike a JFrame, the pane receives a stream of events during
+ * drag-resizing.
*/
- resizeTimer = new Timer(DEFAULT_RESIZING_PAINT_DELAY,
- new ActionListener() {
+ resizeTimer = new Timer(DEFAULT_RESIZING_PAINT_DELAY, new ActionListener() {
- public void actionPerformed(final ActionEvent e) {
- if (!isWellDefined())
- return;
+ public void actionPerformed(final ActionEvent e) {
+ if (!isWellDefined())
+ return;
- // LOGGER.debug("resizeTimer performed");
+ // LOGGER.debug("resizeTimer performed");
- // final Rectangle bounds = getMapPaneSize();
- //
- // System.out.println("\n\ntimer performs with bounds = "
- // + bounds);
+ // final Rectangle bounds = getMapPaneSize();
+ //
+ // System.out.println("\n\ntimer performs with bounds = "
+ // + bounds);
- // final Envelope geoMapArea = tranformWindowToGeo(
- // bounds.x, bounds.y, bounds.x + bounds.width,
- // bounds.y + bounds.height);
+ // final Envelope geoMapArea = tranformWindowToGeo(
+ // bounds.x, bounds.y, bounds.x + bounds.width,
+ // bounds.y + bounds.height);
- paneResized = true;
- if (!setMapArea(getMapArea())) {
- // It's important to request new rendering here.
- // setMapArea only returns true and only calls
- // requestStartRendering if the maparea has changed.
- // But if the component is resized, the maparea
- // doesn't have to change.
- requestStartRendering();
- }
+ paneResized = true;
+ if (!setMapArea(getMapArea())) {
+ // It's important to request new rendering here.
+ // setMapArea only returns true and only calls
+ // requestStartRendering if the maparea has changed.
+ // But if the component is resized, the maparea
+ // doesn't have to change.
+ requestStartRendering();
+ }
- }
- });
+ }
+ });
resizeTimer.setRepeats(false);
this.addComponentListener(new ComponentAdapter() {
@@ -754,8 +706,7 @@
public void componentResized(final ComponentEvent e) {
// Seems to be called twice with the same size..
- if (oldVisibleRect != null
- && oldVisibleRect.equals(getMapPaneSize())) {
+ if (oldVisibleRect != null && oldVisibleRect.equals(getMapPaneSize())) {
// LOGGER.debug("skipping resize.");
return;
}
@@ -774,8 +725,7 @@
@Override
public void actionPerformed(final ActionEvent e) {
- if ((!localExecuter.isRunning())
- && (bgExecuter != null && !bgExecuter.isRunning())) {
+ if ((!localExecuter.isRunning()) && (bgExecuter != null && !bgExecuter.isRunning())) {
repaintTimer.stop();
} else {
updateFinalImage();
@@ -789,8 +739,7 @@
repaintTimer.setRepeats(true);
/*
- * Setting up the startRenderThreadsTimer. This Timer starts
- * automatically.
+ * Setting up the startRenderThreadsTimer. This Timer starts automatically.
*/
startRenderThreadsTimer = new Timer(100, new ActionListener() {
@@ -816,8 +765,8 @@
}
/**
- * Propagiert ein Ereignis an alle angeschlossenen Listener. Es gibt
- * verschiedene implementationen von {@link XMapPaneEvent}
+ * Propagiert ein Ereignis an alle angeschlossenen Listener. Es gibt verschiedene implementationen von
+ * {@link XMapPaneEvent}
*
* @param e
* Ereignis
@@ -838,15 +787,12 @@
}
/**
- * Korrigiert den {@link Envelope} aka {@code mapArea} auf die beste
- * erlaubte Flaeche damit die Massstabsbeschaenkungen noch eingehalten
- * werden, FALLS der uebergeben Envelope nicht schon gueltig sein sollte.<br>
- * Since 21. April 09: Before thecalculation starts, the aspect ratio is
- * corrected. This change implies, that setMapArea() will most of the time
- * not allow setting to a wrong aspectRatio.<br/>
- * This method also checks, that the extend of the mapArea is greater 0! (A
- * BBOX of 0 width and height can result froma point layer with just one
- * point and will later crash the WIndowsToMapTransformation)
+ * Korrigiert den {@link Envelope} aka {@code mapArea} auf die beste erlaubte Flaeche damit die
+ * Massstabsbeschaenkungen noch eingehalten werden, FALLS der uebergeben Envelope nicht schon gueltig sein sollte.<br>
+ * Since 21. April 09: Before thecalculation starts, the aspect ratio is corrected. This change implies, that
+ * setMapArea() will most of the time not allow setting to a wrong aspectRatio.<br/>
+ * This method also checks, that the extend of the mapArea is greater 0! (A BBOX of 0 width and height can result
+ * froma point layer with just one point and will later crash the WIndowsToMapTransformation)
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
@@ -866,9 +812,8 @@
Envelope newArea = null;
/**
- * Correct the aspect Ratio before we check the rest. Otherwise we might
- * easily fail. We allow to grow here, because we don't check against
- * the maxExtend
+ * Correct the aspect Ratio before we check the rest. Otherwise we might easily fail. We allow to grow here,
+ * because we don't check against the maxExtend
*/
final Rectangle curPaintArea = getMapPaneSize();
@@ -900,10 +845,8 @@
if (newArea == null) {
- final Coordinate ll = new Coordinate(centerX - newWidth2, centerY
- - newHeight2);
- final Coordinate ur = new Coordinate(centerX + newWidth2, centerY
- + newHeight2);
+ final Coordinate ll = new Coordinate(centerX - newWidth2, centerY - newHeight2);
+ final Coordinate ur = new Coordinate(centerX + newWidth2, centerY + newHeight2);
newArea = new Envelope(ll, ur);
}
@@ -915,12 +858,9 @@
/*
* If a maxAllowedExtend is set, we have to honour that...
*/
- while (maxAllowedExtend != null && !maxAllowedExtend.contains(newArea)
- && newArea != null && !newArea.isNull()
- && !Double.isNaN(newArea.getMinX())
- && !Double.isNaN(newArea.getMaxX())
- && !Double.isNaN(newArea.getMinY())
- && !Double.isNaN(newArea.getMaxY())) // Due to Double precision
+ while (maxAllowedExtend != null && !maxAllowedExtend.contains(newArea) && newArea != null && !newArea.isNull()
+ && !Double.isNaN(newArea.getMinX()) && !Double.isNaN(newArea.getMaxX())
+ && !Double.isNaN(newArea.getMinY()) && !Double.isNaN(newArea.getMaxY())) // Due to Double precision
// problems, this may
// iterate for ever
{
@@ -933,53 +873,43 @@
// Exceeds top? Move down and maybe cut
if (newArea.getMaxY() > maxAllowedExtend.getMaxY()) {
- final double divY = newArea.getMaxY()
- - maxAllowedExtend.getMaxY();
+ final double divY = newArea.getMaxY() - maxAllowedExtend.getMaxY();
// LOGGER.debug("Moving area down by " + divY);
- newArea = new Envelope(new Coordinate(newArea.getMinX(),
- newArea.getMinY() - divY), new Coordinate(
+ newArea = new Envelope(new Coordinate(newArea.getMinX(), newArea.getMinY() - divY), new Coordinate(
newArea.getMaxX(), newArea.getMaxY() - divY));
if (newArea.getMinY() < maxAllowedExtend.getMinY()) {
// LOGGER.debug("Now it exeeds the bottom border.. cut!");
// And cut the bottom if it moved out of the area
- newArea = new Envelope(new Coordinate(newArea.getMinX(),
- maxAllowedExtend.getMinY()), new Coordinate(
- newArea.getMaxX(), newArea.getMaxY()));
+ newArea = new Envelope(new Coordinate(newArea.getMinX(), maxAllowedExtend.getMinY()),
+ new Coordinate(newArea.getMaxX(), newArea.getMaxY()));
// LOGGER.debug("and fix aspect ratio");
- newArea = JTSUtil.fixAspectRatio(
- getMapPaneSize(),
- new ReferencedEnvelope(newArea, env
- .getCoordinateReferenceSystem()), false);
+ newArea = JTSUtil.fixAspectRatio(getMapPaneSize(),
+ new ReferencedEnvelope(newArea, env.getCoordinateReferenceSystem()), false);
}
}
// Exceeds bottom? Move up and maybe cut
if (newArea.getMinY() < maxAllowedExtend.getMinY()) {
- final double divY = newArea.getMinY()
- - maxAllowedExtend.getMinY();
+ final double divY = newArea.getMinY() - maxAllowedExtend.getMinY();
// LOGGER.debug("Moving area up by " + divY);
- newArea = new Envelope(new Coordinate(newArea.getMinX(),
- newArea.getMinY() - divY), new Coordinate(
+ newArea = new Envelope(new Coordinate(newArea.getMinX(), newArea.getMinY() - divY), new Coordinate(
newArea.getMaxX(), newArea.getMaxY() - divY));
if (newArea.getMaxY() > maxAllowedExtend.getMaxY()) {
// LOGGER.debug("Now it exeeds the top border.. cut!");
// And cut the bottom if it moved out of the area
- newArea = new Envelope(new Coordinate(newArea.getMinX(),
- newArea.getMinY()), new Coordinate(
+ newArea = new Envelope(new Coordinate(newArea.getMinX(), newArea.getMinY()), new Coordinate(
newArea.getMaxX(), maxAllowedExtend.getMaxY()));
// LOGGER.debug("and fix aspect ratio");
- newArea = JTSUtil.fixAspectRatio(
- getMapPaneSize(),
- new ReferencedEnvelope(newArea, env
- .getCoordinateReferenceSystem()), false);
+ newArea = JTSUtil.fixAspectRatio(getMapPaneSize(),
+ new ReferencedEnvelope(newArea, env.getCoordinateReferenceSystem()), false);
}
}
@@ -987,28 +917,22 @@
if (newArea.getMaxX() > maxAllowedExtend.getMaxX()) {
// Move left..
- final double divX = newArea.getMaxX()
- - maxAllowedExtend.getMaxX();
+ final double divX = newArea.getMaxX() - maxAllowedExtend.getMaxX();
// LOGGER.debug("Moving area left by " + divX);
- newArea = new Envelope(new Coordinate(newArea.getMinX() - divX,
- newArea.getMinY()), new Coordinate(newArea.getMaxX()
- - divX, newArea.getMaxY()));
+ newArea = new Envelope(new Coordinate(newArea.getMinX() - divX, newArea.getMinY()), new Coordinate(
+ newArea.getMaxX() - divX, newArea.getMaxY()));
if (newArea.getMinX() < maxAllowedExtend.getMinX()) {
// LOGGER.debug("Now it exeeds the left border.. cut!");
// And cut the left if it moved out of the area
- newArea = new Envelope(
- new Coordinate(maxAllowedExtend.getMinX(),
- newArea.getMinY()),
+ newArea = new Envelope(new Coordinate(maxAllowedExtend.getMinX(), newArea.getMinY()),
new Coordinate(newArea.getMaxX(), newArea.getMaxY()));
// LOGGER.debug("and fix aspect ratio");
- newArea = JTSUtil.fixAspectRatio(
- getMapPaneSize(),
- new ReferencedEnvelope(newArea, env
- .getCoordinateReferenceSystem()), false);
+ newArea = JTSUtil.fixAspectRatio(getMapPaneSize(),
+ new ReferencedEnvelope(newArea, env.getCoordinateReferenceSystem()), false);
}
}
@@ -1016,39 +940,32 @@
if (newArea.getMinX() < maxAllowedExtend.getMinX()) {
// Move right..
- final double divX = newArea.getMinX()
- - maxAllowedExtend.getMinX();
+ final double divX = newArea.getMinX() - maxAllowedExtend.getMinX();
// LOGGER.debug("Moving area right by " + divX);
- newArea = new Envelope(new Coordinate(newArea.getMinX() - divX,
- newArea.getMinY()), new Coordinate(newArea.getMaxX()
- - divX, newArea.getMaxY()));
+ newArea = new Envelope(new Coordinate(newArea.getMinX() - divX, newArea.getMinY()), new Coordinate(
+ newArea.getMaxX() - divX, newArea.getMaxY()));
if (newArea.getMaxX() > maxAllowedExtend.getMaxX()) {
// LOGGER.debug("Now it exeeds the right border.. cut!");
// And cut the left if it moved out of the area
- newArea = new Envelope(new Coordinate(newArea.getMinX(),
- newArea.getMinY()), new Coordinate(
+ newArea = new Envelope(new Coordinate(newArea.getMinX(), newArea.getMinY()), new Coordinate(
maxAllowedExtend.getMaxX(), newArea.getMaxY()));
// LOGGER.debug("and fix aspect ratio");
- newArea = JTSUtil.fixAspectRatio(
- getMapPaneSize(),
- new ReferencedEnvelope(newArea, env
- .getCoordinateReferenceSystem()), false);
+ newArea = JTSUtil.fixAspectRatio(getMapPaneSize(),
+ new ReferencedEnvelope(newArea, env.getCoordinateReferenceSystem()), false);
}
}
}
- return new ReferencedEnvelope(newArea,
- env.getCoordinateReferenceSystem());
+ return new ReferencedEnvelope(newArea, env.getCoordinateReferenceSystem());
}
/**
- * Should be called when the {@link JMapPane} is not needed no more to help
- * the GarbageCollector
+ * Should be called when the {@link JMapPane} is not needed no more to help the GarbageCollector
*
* Removes all {@link JMapPaneListener}s that are registered
*
@@ -1079,9 +996,7 @@
try {
Thread.sleep(200);
} catch (final InterruptedException e) {
- LOGGER.warn(
- "while XMapPane we are waiting for the localExcutor to stop",
- e);
+ LOGGER.warn("while XMapPane we are waiting for the localExcutor to stop", e);
}
}
if (localExecuter.isRunning()) {
@@ -1107,20 +1022,16 @@
}
/**
- * Draws a rectangle in XOR mode from the origin at {@link #startPos} to the
- * given point. All in screen coordinates.
+ * Draws a rectangle in XOR mode from the origin at {@link #startPos} to the given point. All in screen coordinates.
*/
- protected void drawRectangle(final Graphics graphics, final Point startPos,
- final Point e) {
+ protected void drawRectangle(final Graphics graphics, final Point startPos, final Point e) {
drawRectangle(graphics, startPos, e, Color.WHITE, false);
}
/**
- * Draws a rectangle in XOR mode from the origin at {@link #startPos} to the
- * given point. All in screen coordinates.
+ * Draws a rectangle in XOR mode from the origin at {@link #startPos} to the given point. All in screen coordinates.
*/
- protected void drawRectangle(final Graphics graphics, final Point startPos,
- final Point e, Color color, boolean fill) {
+ protected void drawRectangle(final Graphics graphics, final Point startPos, final Point e, Color color, boolean fill) {
if (!isWellDefined())
return;
@@ -1147,10 +1058,9 @@
}
/**
- * Diretly paints scaled preview into the {@link SelectableXMapPane}. Used
- * to give the user something to look at while we are rendering. Method
- * should be called after {@link #setMapArea(Envelope)} has been set to the
- * new mapArea and transform has been reset.<br>
+ * Diretly paints scaled preview into the {@link SelectableXMapPane}. Used to give the user something to look at
+ * while we are rendering. Method should be called after {@link #setMapArea(Envelope)} has been set to the new
+ * mapArea and transform has been reset.<br>
*
* @param g
* Graphics2D to paint the preview into
@@ -1172,8 +1082,7 @@
final Rectangle visibleArea = getMapPaneSize();
// Calculate the oldMapArea in the current WindowCoordinates:
- final Envelope oldMapWindow = tranformGeoToWindow(
- oldMapArea.getMinX(), oldMapArea.getMinY(),
+ final Envelope oldMapWindow = tranformGeoToWindow(oldMapArea.getMinX(), oldMapArea.getMinY(),
oldMapArea.getMaxX(), oldMapArea.getMaxY());
final int xx1 = (int) Math.round(oldMapWindow.getMinX());
@@ -1183,21 +1092,16 @@
graphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
- graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
- RenderingHints.VALUE_ANTIALIAS_OFF);
- graphics.setRenderingHint(RenderingHints.KEY_RENDERING,
- RenderingHints.VALUE_RENDER_SPEED);
+ graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
+ graphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
- graphics.drawImage(getPreFinalImage(), xx1, yy1, xx2, yy2,
- (int) visibleArea.getMinX(), (int) visibleArea.getMinY(),
- (int) visibleArea.getMaxX(), (int) visibleArea.getMaxY(),
+ graphics.drawImage(getPreFinalImage(), xx1, yy1, xx2, yy2, (int) visibleArea.getMinX(),
+ (int) visibleArea.getMinY(), (int) visibleArea.getMaxX(), (int) visibleArea.getMaxY(),
getMapBackgroundColor(), null);
- final Rectangle painedArea = new Rectangle(xx1, yy1, xx2 - xx1, yy2
- - yy1);
+ final Rectangle painedArea = new Rectangle(xx1, yy1, xx2 - xx1, yy2 - yy1);
- SwingUtil.clearAround(graphics, painedArea, visibleArea,
- getMapBackgroundColor());
+ SwingUtil.clearAround(graphics, painedArea, visibleArea, getMapBackgroundColor());
addGadgets(graphics, true);
} catch (Exception e) {
@@ -1223,8 +1127,7 @@
*/
private Image getBgImage() {
if (bgImage == null) {
- bgImage = new BufferedImage(getMapPaneSize().width,
- getMapPaneSize().height, IMAGETYPE);
+ bgImage = new BufferedImage(getMapPaneSize().width, getMapPaneSize().height, IMAGETYPE);
SwingUtil.clearImage(finalImage, getMapBackgroundColor());
}
@@ -1242,8 +1145,7 @@
//
if (finalImage == null) {
// Rectangle curPaintArea = getMapPaneSize();
- finalImage = new BufferedImage(getMapPaneSize().width,
- getMapPaneSize().height, IMAGETYPE);
+ finalImage = new BufferedImage(getMapPaneSize().width, getMapPaneSize().height, IMAGETYPE);
SwingUtil.clearImage(finalImage, getMapBackgroundColor());
// requestStartRendering();
@@ -1257,8 +1159,7 @@
private BufferedImage getLocalImage() {
if (localImage == null) {
- localImage = new BufferedImage(getMapPaneSize().width,
- getMapPaneSize().height, IMAGETYPE_withAlpha);
+ localImage = new BufferedImage(getMapPaneSize().width, getMapPaneSize().height, IMAGETYPE_withAlpha);
SwingUtil.clearImage(localImage, getMapBackgroundColor());
}
@@ -1299,20 +1200,17 @@
// TODO is needed at all, this should go to setMapArea maybe
if (localContext.getCoordinateReferenceSystem() == null)
try {
- localContext.setCoordinateReferenceSystem(GeoImportUtil
- .getDefaultCRS());
+ localContext.setCoordinateReferenceSystem(GeoImportUtil.getDefaultCRS());
} catch (final Exception e) {
throw new RuntimeException("setting context CRS:", e);
}
- return new ReferencedEnvelope(mapArea,
- localContext.getCoordinateReferenceSystem());
+ return new ReferencedEnvelope(mapArea, localContext.getCoordinateReferenceSystem());
}
/**
- * Returns the background {@link Color} of the map pane. If not set, the
- * methods looks for a parent component and will use its background color.
- * If no parent component is available, WHITE is returned.
+ * Returns the background {@link Color} of the map pane. If not set, the methods looks for a parent component and
+ * will use its background color. If no parent component is available, WHITE is returned.
**/
public Color getMapBackgroundColor() {
if (mapBackgroundColor == null) {
@@ -1325,8 +1223,7 @@
}
/**
- * Get the BufferedImage to use as a flaoting icon in the lower right
- * corner.
+ * Get the BufferedImage to use as a flaoting icon in the lower right corner.
*
* @return <code>null</code> if the feature is deactivated.
*/
@@ -1335,11 +1232,9 @@
}
/**
- * Returns the evelope of the viewable area. The JMapPane will never show
- * anything outside of this extend. If this has been set to
- * <code>null</code> via {@link #setMaxExtend(Envelope)}, it tries to return
- * quickly the context's bounds. It it takes to long to determine the
- * context bounds, <code>null</code> is returned.
+ * Returns the evelope of the viewable area. The JMapPane will never show anything outside of this extend. If this
+ * has been set to <code>null</code> via {@link #setMaxExtend(Envelope)}, it tries to return quickly the context's
+ * bounds. It it takes to long to determine the context bounds, <code>null</code> is returned.
*
* @param maxExtend
* <code>null</code> to not have this restriction.
@@ -1358,8 +1253,7 @@
return null;
}
- return JTSUtil.fixAspectRatio(getMapPaneSize(),
- addDefaultMargin(layerBounds), true);
+ return JTSUtil.fixAspectRatio(getMapPaneSize(), addDefaultMargin(layerBounds), true);
}
return JTSUtil.checkNotZeroArea(maxExtend);
@@ -1372,8 +1266,7 @@
*/
protected ReferencedEnvelope getVisibleLayoutBounds(MapContext context) {
ReferencedEnvelope result = null;
- CoordinateReferenceSystem crs = context.getAreaOfInterest()
- .getCoordinateReferenceSystem();
+ CoordinateReferenceSystem crs = context.getCoordinateReferenceSystem();
final int length = context.getLayerCount();
MapLayer layer;
@@ -1389,9 +1282,8 @@
if (SPECIAL_LINES_LAYER_ID.equals(layer.getTitle()))
continue;
/*
- * fs = layer.getFeatureSource(); sourceCrs =
- * fs.getSchema().getDefaultGeometry() .getCoordinateSystem(); env =
- * new ReferencedEnvelope(fs.getBounds(), sourceCrs);
+ * fs = layer.getFeatureSource(); sourceCrs = fs.getSchema().getDefaultGeometry() .getCoordinateSystem();
+ * env = new ReferencedEnvelope(fs.getBounds(), sourceCrs);
*/
env = layer.getBounds();
@@ -1400,8 +1292,7 @@
} else {
try {
sourceCrs = env.getCoordinateReferenceSystem();
- if ((sourceCrs != null) && crs != null
- && !CRS.equalsIgnoreMetadata(sourceCrs, crs)) {
+ if ((sourceCrs != null) && crs != null && !CRS.equalsIgnoreMetadata(sourceCrs, crs)) {
env = env.transform(crs, true);
}
@@ -1419,8 +1310,7 @@
result = env;
} else {
try {
- result.expandToInclude(env.transform(
- result.getCoordinateReferenceSystem(), true));
+ result.expandToInclude(env.transform(result.getCoordinateReferenceSystem(), true));
} catch (Exception e) {
LOGGER.error(e);
}
@@ -1433,8 +1323,8 @@
}
/**
- * Retuns the maximum allowed zoom scale. This is the smaller number value
- * of the two. Defaults to {@link Double}.MIN_VALUE
+ * Retuns the maximum allowed zoom scale. This is the smaller number value of the two. Defaults to {@link Double}
+ * .MIN_VALUE
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
@@ -1443,8 +1333,8 @@
}
/**
- * Retuns the minimum allowed zoom scale. This is the bigger number value of
- * the two. Defaults to {@link Double}.MAX_VALUE
+ * Retuns the minimum allowed zoom scale. This is the bigger number value of the two. Defaults to {@link Double}
+ * .MAX_VALUE
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
@@ -1465,11 +1355,10 @@
}
/**
- * Liefert eine affine Transformation, um von den Fenster-Koordinaten in die
- * Karten-Koordinaten (Lat/Lon) umzurechnen.
+ * Liefert eine affine Transformation, um von den Fenster-Koordinaten in die Karten-Koordinaten (Lat/Lon)
+ * umzurechnen.
*
- * @return eine Kopie der aktuellen Transformation; <code>null</code> wenn
- * noch keine Karte angezeigt wird
+ * @return eine Kopie der aktuellen Transformation; <code>null</code> wenn noch keine Karte angezeigt wird
*/
public AffineTransform getScreenToWorld() {
if (screenToWorld == null)
@@ -1495,17 +1384,16 @@
}
/**
- * A flag indicating if dispose() has already been called. If true, then
- * further use of this {@link SelectableXMapPane} is undefined.
+ * A flag indicating if dispose() has already been called. If true, then further use of this
+ * {@link SelectableXMapPane} is undefined.
*/
private boolean isDisposed() {
return disposed;
}
/**
- * Returns whether a layer is regarded or ignored on {@link #SELECT_TOP},
- * {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP} actions. Returns
- * <code>true</code> if the selectability has not been defined.
+ * Returns whether a layer is regarded or ignored on {@link #SELECT_TOP}, {@link #SELECT_ALL} and
+ * {@link #SELECT_ONE_FROM_TOP} actions. Returns <code>true</code> if the selectability has not been defined.
*
* @param layer
* a layer
@@ -1516,8 +1404,8 @@
}
/**
- * Return <code>true</code> if a CRS and a {@link #mapArea} are set and the
- * {@link XMapPane} is visible and has bounds set.
+ * Return <code>true</code> if a CRS and a {@link #mapArea} are set and the {@link XMapPane} is visible and has
+ * bounds set.
*/
public boolean isWellDefined() {
try {
@@ -1623,13 +1511,11 @@
// Inform listeners that rendering has completed if have no requests to
// start again
if (!requestStartRendering)
- fireMapPaneEvent(new MapRenderingStateEvent(this,
- RenderingState.ON_HOLD));
+ fireMapPaneEvent(new MapRenderingStateEvent(this, RenderingState.ON_HOLD));
}
/**
- * Liefert die Anzahl der Einheiten, die ein Bildschirm-Pixel darstellt. Die
- * Einheit ist die Grundeinheit des CRS
+ * Liefert die Anzahl der Einheiten, die ein Bildschirm-Pixel darstellt. Die Einheit ist die Grundeinheit des CRS
*/
public double getScale() {
@@ -1650,22 +1536,19 @@
}
/**
- * Liefert den OGC ScaleDenominator der der aktuellen Skale entspricht. Wenn
- * es einen Fehler gibt 0.0
+ * Liefert den OGC ScaleDenominator der der aktuellen Skale entspricht. Wenn es einen Fehler gibt 0.0
*/
public double getScaleDenominator() {
if (getScale() != 0.0)
- return RendererUtilities.calculateOGCScale(getMapArea(),
- getWidth(), null);
+ return RendererUtilities.calculateOGCScale(getMapArea(), getWidth(), null);
else
return 0.0;
}
/**
- * Called by the {@link RenderingExecutor} when rendering has been
- * completed.
+ * Called by the {@link RenderingExecutor} when rendering has been completed.
*
* @param l
* long ms the rendering took
@@ -1689,14 +1572,12 @@
// Inform listeners that rendering has completed if have no requests to
// start again
if (!requestStartRendering)
- fireMapPaneEvent(new MapRenderingStateEvent(this,
- RenderingState.ON_HOLD));
+ fireMapPaneEvent(new MapRenderingStateEvent(this, RenderingState.ON_HOLD));
}
/**
- * Called by the {@linkplain XMapPane.RenderingTask} when rendering failed.
- * Publishes a {@linkplain XMapPaneEvent} of type
- * {@code MapPaneEvent.Type.RENDERING_STOPPED} to listeners.
+ * Called by the {@linkplain XMapPane.RenderingTask} when rendering failed. Publishes a {@linkplain XMapPaneEvent}
+ * of type {@code MapPaneEvent.Type.RENDERING_STOPPED} to listeners.
*
* @param renderingError
* The error that occured during rendering
@@ -1706,9 +1587,8 @@
public void onRenderingFailed(final Exception renderingError) {
// Store the exceptions so we can show it to the user:
- if (!(renderingError instanceof java.lang.IllegalArgumentException && renderingError
- .getMessage().equals(
- "Argument \"sourceCRS\" should not be null.")))
+ if (!(renderingError instanceof java.lang.IllegalArgumentException && renderingError.getMessage().equals(
+ "Argument \"sourceCRS\" should not be null.")))
this.renderingErrors.add(renderingError);
if (renderingErrors.size() > 3)
renderingErrors.remove(0);
@@ -1722,8 +1602,7 @@
// Inform listeners that rendering has completed if have no requests to
// start again
if (!requestStartRendering)
- fireMapPaneEvent(new MapRenderingStateEvent(this,
- RenderingState.ON_HOLD));
+ fireMapPaneEvent(new MapRenderingStateEvent(this, RenderingState.ON_HOLD));
}
@Override
@@ -1758,10 +1637,8 @@
// If the new mapArea and the oldMapArea intersect, we can draw some
// quick scaled preview to make the user feel that something is
// happening.
- if (lastRenderingDuration > PRESCALE_MINTIME && mapAreaChanged
- && oldMapArea != null
- && getMapArea().intersects(oldMapArea)
- && !getMapArea().equals(oldMapArea) && !paneResized) {
+ if (lastRenderingDuration > PRESCALE_MINTIME && mapAreaChanged && oldMapArea != null
+ && getMapArea().intersects(oldMapArea) && !getMapArea().equals(oldMapArea) && !paneResized) {
mapAreaChanged = false;
@@ -1788,8 +1665,8 @@
}
/**
- * If {@link #blinkRenderer} is not <code>null</code>, the blinking features
- * are rendered into the {@link Graphics2D}
+ * If {@link #blinkRenderer} is not <code>null</code>, the blinking features are rendered into the
+ * {@link Graphics2D}
*/
private void blink(Graphics2D g2d) {
if (blinkRenderer != null) {
@@ -1799,13 +1676,11 @@
}
/**
- * Heavily works on releasing all resources related to the four
- * {@link Image}s used to cache the results of the different renderers.<br>
- * In November 2009 i had some memory leaking problems with {@link XMapPane}
- * . The resources of the buffered images were never released. It seem to be
- * important to call the GC right after flushing the images.<br>
- * Hence this method may take a while, because it calls the GC up to four
- * times.
+ * Heavily works on releasing all resources related to the four {@link Image}s used to cache the results of the
+ * different renderers.<br>
+ * In November 2009 i had some memory leaking problems with {@link XMapPane} . The resources of the buffered images
+ * were never released. It seem to be important to call the GC right after flushing the images.<br>
+ * Hence this method may take a while, because it calls the GC up to four times.
*/
private void disposeImages() {
@@ -1905,12 +1780,10 @@
}
/**
- * Calculate the affine transforms used to convert between world and pixel
- * coordinates. The calculations here are very basic and assume a cartesian
- * reference system.
+ * Calculate the affine transforms used to convert between world and pixel coordinates. The calculations here are
+ * very basic and assume a cartesian reference system.
* <p>
- * Tne transform is calculated such that {@code envelope} will be centred in
- * the display
+ * Tne transform is calculated such that {@code envelope} will be centred in the display
*
* @param envelope
* the current map extent (world coordinates)
@@ -1926,11 +1799,10 @@
if (mapArea == null)
return;
- final ReferencedEnvelope refMapEnv = new ReferencedEnvelope(mapArea,
- getMapContext().getCoordinateReferenceSystem());
+ final ReferencedEnvelope refMapEnv = new ReferencedEnvelope(mapArea, getMapContext()
+ .getCoordinateReferenceSystem());
- worldToScreen = RendererUtilities.worldToScreenTransform(refMapEnv,
- getMapPaneSize());
+ worldToScreen = RendererUtilities.worldToScreenTransform(refMapEnv, getMapPaneSize());
try {
if (worldToScreen != null)
@@ -2023,41 +1895,34 @@
* Set the new map area.
*
* @param newMapArea
- * @return <code>true</code> if the mapArea has been changed and a repaint
- * has been triggered.
+ * @return <code>true</code> if the mapArea has been changed and a repaint has been triggered.
*/
public boolean setMapArea(final Envelope newMapArea) {
if (newMapArea == null)
return false;
if (getMapContext().getCoordinateReferenceSystem() == null)
return false;
- return setMapArea(new ReferencedEnvelope(newMapArea, getMapContext()
- .getCoordinateReferenceSystem()));
+ return setMapArea(new ReferencedEnvelope(newMapArea, getMapContext().getCoordinateReferenceSystem()));
}
/**
* Set the new map area.
*
* @param newMapArea
- * @return <code>true</code> if the mapArea has been changed and a repaint
- * has been triggered.
+ * @return <code>true</code> if the mapArea has been changed and a repaint has been triggered.
*/
public boolean setMapArea(final ReferencedEnvelope newMapArea) {
- if (newMapArea == null
- || bestAllowedMapArea(newMapArea).equals(mapArea)) {
+ if (newMapArea == null || bestAllowedMapArea(newMapArea).equals(mapArea)) {
// No change.. no need to repaint
return false;
}
// Testing, whether NaN or Infinity are used in the newMapArea
- if (newMapArea.isNull() || Double.isInfinite(newMapArea.getMaxX())
- || Double.isInfinite(newMapArea.getMaxY())
- || Double.isInfinite(newMapArea.getMinX())
- || Double.isInfinite(newMapArea.getMinY())) {
+ if (newMapArea.isNull() || Double.isInfinite(newMapArea.getMaxX()) || Double.isInfinite(newMapArea.getMaxY())
+ || Double.isInfinite(newMapArea.getMinX()) || Double.isInfinite(newMapArea.getMinY())) {
// No change.. ugly new values
- LOGGER.warn("setMapArea has been called with newArea = "
- + newMapArea);
+ LOGGER.warn("setMapArea has been called with newArea = " + newMapArea);
return false;
}
@@ -2067,15 +1932,11 @@
if (mapArea != null) {
final double tolX = mapArea.getWidth() / 1000.;
final double tolY = mapArea.getHeight() / 1000.;
- if ((candNew.getMinX() - tolX < mapArea.getMinX())
- && (mapArea.getMinX() < candNew.getMinX() + tolX)
- && (candNew.getMaxX() - tolX < mapArea.getMaxX())
- && (mapArea.getMaxX() < candNew.getMaxX() + tolX)
+ if ((candNew.getMinX() - tolX < mapArea.getMinX()) && (mapArea.getMinX() < candNew.getMinX() + tolX)
+ && (candNew.getMaxX() - tolX < mapArea.getMaxX()) && (mapArea.getMaxX() < candNew.getMaxX() + tolX)
- && (candNew.getMinY() - tolY < mapArea.getMinY())
- && (mapArea.getMinY() < candNew.getMinY() + tolY)
- && (candNew.getMaxY() - tolY < mapArea.getMaxY())
- && (mapArea.getMaxY() < candNew.getMaxY() + tolY)
+ && (candNew.getMinY() - tolY < mapArea.getMinY()) && (mapArea.getMinY() < candNew.getMinY() + tolY)
+ && (candNew.getMaxY() - tolY < mapArea.getMaxY()) && (mapArea.getMaxY() < candNew.getMaxY() + tolY)
) {
// The two mapAreas only differ my 1/1000th.. ignore
@@ -2090,12 +1951,10 @@
resetTransforms();
if (localContext != null) {
- localContext.setAreaOfInterest(mapArea,
- localContext.getCoordinateReferenceSystem());
+ localContext.setAreaOfInterest(mapArea, localContext.getCoordinateReferenceSystem());
}
if (bgContext != null) {
- bgContext.setAreaOfInterest(mapArea,
- localContext.getCoordinateReferenceSystem());
+ bgContext.setAreaOfInterest(mapArea, localContext.getCoordinateReferenceSystem());
}
mapAreaChanged = true;
@@ -2128,18 +1987,16 @@
}
/**
- * Sets whether a layer is regarded or ignored on {@link #SELECT_TOP},
- * {@link #SELECT_ALL} and {@link #SELECT_ONE_FROM_TOP} actions.
+ * Sets whether a layer is regarded or ignored on {@link #SELECT_TOP}, {@link #SELECT_ALL} and
+ * {@link #SELECT_ONE_FROM_TOP} actions.
*
* @param layer
* a layer
* @param selectable
- * if {@code false} the layer is ignored during the upper
- * mentioned actions. If <code>null</code>, the default (true)
- * will be used.
+ * if {@code false} the layer is ignored during the upper mentioned actions. If <code>null</code>, the
+ * default (true) will be used.
*/
- public void setMapLayerSelectable(final MapLayer layer,
- final Boolean selectable) {
+ public void setMapLayerSelectable(final MapLayer layer, final Boolean selectable) {
if (selectable == null)
mapLayerSelectable.remove(layer);
else
@@ -2147,8 +2004,7 @@
}
/**
- * Defines an evelope of the viwable area. The JMapPane will never show
- * anything outside of this extend.
+ * Defines an evelope of the viwable area. The JMapPane will never show anything outside of this extend.
*
* @param maxExtend
* <code>null</code> to not have this restriction.
@@ -2158,13 +2014,11 @@
}
/**
- * Set the maximum allowed zoom scale. This is the smaller number value of
- * the two. If <code>null</code> is passed, Double.MINVALUE are used which
- * mean there is no restriction.
+ * Set the maximum allowed zoom scale. This is the smaller number value of the two. If <code>null</code> is passed,
+ * Double.MINVALUE are used which mean there is no restriction.
*/
public void setMaxZoomScale(final Double maxZoomScale) {
- this.maxZoomScale = maxZoomScale == null ? Double.MIN_VALUE
- : maxZoomScale;
+ this.maxZoomScale = maxZoomScale == null ? Double.MIN_VALUE : maxZoomScale;
}
// /** Stored the time used for the last real rendering in ms. **/
@@ -2176,22 +2030,19 @@
private StreamingRenderer blinkRenderer;
/**
- * Set the minimum (nearest) allowed zoom scale. This is the bigger number
- * value of the two. If <code>null</code> is passed, Double.MAXVALUE are
- * used which mean there is no restriction.
+ * Set the minimum (nearest) allowed zoom scale. This is the bigger number value of the two. If <code>null</code> is
+ * passed, Double.MAXVALUE are used which mean there is no restriction.
*
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
public void setMinZoomScale(final Double minZoomScale) {
- this.minZoomScale = minZoomScale == null ? Double.MAX_VALUE
- : minZoomScale;
+ this.minZoomScale = minZoomScale == null ? Double.MAX_VALUE : minZoomScale;
}
/**
- * If <code>true</code>, allow the {@link XMapPane} to process #repaint()
- * requests. Otherwise the map will not paint anything and not start any
- * rendering {@link Thread}s.
+ * If <code>true</code>, allow the {@link XMapPane} to process #repaint() requests. Otherwise the map will not paint
+ * anything and not start any rendering {@link Thread}s.
*/
public void setPainting(final boolean b) {
acceptsRepaintCalls = b;
@@ -2209,8 +2060,7 @@
}
/**
- * Configure the {@link XMapPaneTool} that active on the map. Passing
- * <code>null</code> will set the NO_ACTION tool.
+ * Configure the {@link XMapPaneTool} that active on the map. Passing <code>null</code> will set the NO_ACTION tool.
*/
public void setTool(XMapPaneTool tool) {
if (tool == null)
@@ -2221,12 +2071,10 @@
}
/**
- * Returns a {@code new Rectangle(getWidth(),getHeight()}, because the
- * complete map should be rendered, even a part of the map is currently not
- * visible due to an scrollpane.<br>
- * This method is used instead of {@link #getMapPaneSize()}, because of
- * rendering problems when the map pane is hidden partly by a scroll pane
- * (in ISDSS).
+ * Returns a {@code new Rectangle(getWidth(),getHeight()}, because the complete map should be rendered, even a part
+ * of the map is currently not visible due to an scrollpane.<br>
+ * This method is used instead of {@link #getMapPaneSize()}, because of rendering problems when the map pane is
+ * hidden partly by a scroll pane (in ISDSS).
*/
public Rectangle getMapPaneSize() {
// return getMapPaneSize();
@@ -2255,8 +2103,7 @@
// Inform listeners that rendering has completed if have no requests to
// start again
if (!requestStartRendering)
- fireMapPaneEvent(new MapRenderingStateEvent(this,
- RenderingState.RENDERING));
+ fireMapPaneEvent(new MapRenderingStateEvent(this, RenderingState.RENDERING));
final Rectangle curPaintArea = getMapPaneSize();
@@ -2276,9 +2123,8 @@
getLocalRenderer().setJava2DHints(getJava2dHints());
getLocalRenderer().setRendererHints(getRendererHints());
- final boolean submitted = localExecuter.submit(getMapArea(),
- curPaintArea, (Graphics2D) getLocalImage().getGraphics(),
- getLocalRenderer());
+ final boolean submitted = localExecuter.submit(getMapArea(), curPaintArea, (Graphics2D) getLocalImage()
+ .getGraphics(), getLocalRenderer());
if (submitted)
repaintTimer.restart();
else
@@ -2306,8 +2152,7 @@
* @param py
* Y-Koordinate der BIS-Position
*/
- public Envelope tranformGeoToWindow(final double ox, final double oy,
- final double px, final double py) {
+ public Envelope tranformGeoToWindow(final double ox, final double oy, final double px, final double py) {
final AffineTransform at = getWorldToScreenTransform();
Point2D geoO;
geoO = at.transform(new Point2D.Double(ox, oy), null);
@@ -2324,8 +2169,7 @@
* Y-Koordinate der VON-Position
*/
public Point2D tranformGeoToWindow(final double x, final double y) {
- return getWorldToScreenTransform().transform(new Point2D.Double(x, y),
- null);
+ return getWorldToScreenTransform().transform(new Point2D.Double(x, y), null);
}
/**
@@ -2340,8 +2184,7 @@
* @param py
* Y-Koordinate der BIS-Position
*/
- public Envelope tranformWindowToGeo(final int ox, final int oy,
- final int px, final int py) {
+ public Envelope tranformWindowToGeo(final int ox, final int oy, final int px, final int py) {
final AffineTransform at = getScreenToWorld();
if (at == null)
return null;
@@ -2351,20 +2194,17 @@
// Mmmmm... don't really understand why its x,x,y,y
// return new Envelope(geoO.getX(), geoP.getX(), geoO.getY(),
// geoP.getY());
- return new Envelope(new Coordinate(geoO.getX(), geoO.getY()),
- new Coordinate(geoP.getX(), geoP.getY()));
+ return new Envelope(new Coordinate(geoO.getX(), geoO.getY()), new Coordinate(geoP.getX(), geoP.getY()));
}
/**
- * Will update the cursor. If all rendering is finished also stops the
- * {@link #repaintTimer}
+ * Will update the cursor. If all rendering is finished also stops the {@link #repaintTimer}
*/
public void updateCursor() {
// if the renderers have stopped, also stop the timer that is updating
// the final image
- if (bgExecuter != null && bgExecuter.isRunning()
- || localExecuter.isRunning()) {
+ if (bgExecuter != null && bgExecuter.isRunning() || localExecuter.isRunning()) {
setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
return;
} else {
@@ -2386,21 +2226,18 @@
}
/**
- * The renderers are all rendering into their own {@link Image}s. This
- * method combines all images to one {@link #finalImage}. The
- * {@link #repaintTimer} is calling this method regularely to update the
+ * The renderers are all rendering into their own {@link Image}s. This method combines all images to one
+ * {@link #finalImage}. The {@link #repaintTimer} is calling this method regularely to update the
* {@link #finalImage} even if the renderers are still working.
*/
synchronized protected Image updateFinalImage() {
// Render the two map images first, into the preFinalImage
if (bgExecuter != null) {
- final Graphics2D preFinalG = (Graphics2D) getPreFinalImage()
- .getGraphics();
+ final Graphics2D preFinalG = (Graphics2D) getPreFinalImage().getGraphics();
preFinalG.setBackground(getMapBackgroundColor());
- preFinalG.drawImage(getBgImage(), 0, 0, getMapBackgroundColor(),
- null);
+ preFinalG.drawImage(getBgImage(), 0, 0, getMapBackgroundColor(), null);
// // Draw the local layers image
preFinalG.drawImage(getLocalImage(), 0, 0, null);
@@ -2412,15 +2249,12 @@
final Graphics2D finalG = getFinalImage().createGraphics();
finalG.setBackground(getMapBackgroundColor());
- finalG.drawImage(getPreFinalImage(), getImageOrigin().x,
- getImageOrigin().y, getMapBackgroundColor(), null);
+ finalG.drawImage(getPreFinalImage(), getImageOrigin().x, getImageOrigin().y, getMapBackgroundColor(), null);
// When panning, we have to clear the area around the image
- final Rectangle painedArea = new Rectangle(getImageOrigin().x,
- getImageOrigin().y, getFinalImage().getWidth(), getFinalImage()
- .getHeight());
- SwingUtil.clearAround(finalG, painedArea, getMapPaneSize(),
- getMapBackgroundColor());
+ final Rectangle painedArea = new Rectangle(getImageOrigin().x, getImageOrigin().y, getFinalImage().getWidth(),
+ getFinalImage().getHeight());
+ SwingUtil.clearAround(finalG, painedArea, getMapPaneSize(), getMapBackgroundColor());
addGadgets(finalG, false);
@@ -2430,14 +2264,13 @@
}
/**
- * Paints some optional stuff into the given {@link Graphics2D}. Usually
- * called as the last layer when {@link #updateFinalImage()}
+ * Paints some optional stuff into the given {@link Graphics2D}. Usually called as the last layer when
+ * {@link #updateFinalImage()}
*
* @param forceWait
- * if <code>true</code>, a Wait-message will be painted even
- * though the rendering threads may not yet have started. If
- * <code>false</code>, it will only depend on
- * {@link #localExecuter.isRunning} and #bgExecuter.isRunning
+ * if <code>true</code>, a Wait-message will be painted even though the rendering threads may not yet
+ * have started. If <code>false</code>, it will only depend on {@link #localExecuter.isRunning} and
+ * #bgExecuter.isRunning
*/
private void addGadgets(final Graphics2D graphics, final boolean forceWait) {
@@ -2466,8 +2299,7 @@
int y = 17;
// If the rendering process is still running, indicate this is the image
- if (forceWait || bgExecuter != null && bgExecuter.isRunning()
- || localExecuter.isRunning()) {
+ if (forceWait || bgExecuter != null && bgExecuter.isRunning() || localExecuter.isRunning()) {
y += 8;
@@ -2514,24 +2346,20 @@
}
/**
- * Sets the {@link #mapArea} to best possibly present the given features. If
- * only one single point is given, the window is moved over the point.
+ * Sets the {@link #mapArea} to best possibly present the given features. If only one single point is given, the
+ * window is moved over the point.
*
* @param features
* if <code>null</code> or size==0, the function doesn nothing.
*
- * @return <code>true</code> if the {@link #mapArea} has changed and
- * rendering has been triggered.
+ * @return <code>true</code> if the {@link #mapArea} has changed and rendering has been triggered.
*/
- public boolean zoomTo(
- final FeatureCollection<SimpleFeatureType, SimpleFeature> features) {
+ public boolean zoomTo(final FeatureCollection<SimpleFeatureType, SimpleFeature> features) {
// if (!isWellDefined()) return;
- final CoordinateReferenceSystem mapCRS = getMapContext()
- .getCoordinateReferenceSystem();
- final CoordinateReferenceSystem fCRS = features.getSchema()
- .getCoordinateReferenceSystem();
+ final CoordinateReferenceSystem mapCRS = getMapContext().getCoordinateReferenceSystem();
+ final CoordinateReferenceSystem fCRS = features.getSchema().getCoordinateReferenceSystem();
ReferencedEnvelope _mapArea;
if (mapArea == null)
@@ -2551,8 +2379,7 @@
// bit'
final SimpleFeature singleFeature = features.iterator().next();
- if (((Geometry) singleFeature.getDefaultGeometry())
- .getCoordinates().length > 1) {
+ if (((Geometry) singleFeature.getDefaultGeometry()).getCoordinates().length > 1) {
// System.out.println("Zoomed to only pne poylgon");
// Poly
// TODO max width vs. height
@@ -2579,10 +2406,8 @@
}
}
- final Coordinate newLeftBottom = new Coordinate(centre.x - width
- / 2., centre.y - height / 2.);
- final Coordinate newTopRight = new Coordinate(
- centre.x + width / 2., centre.y + height / 2.);
+ final Coordinate newLeftBottom = new Coordinate(centre.x - width / 2., centre.y - height / 2.);
+ final Coordinate newTopRight = new Coordinate(centre.x + width / 2., centre.y + height / 2.);
final Envelope newMapArea = new Envelope(newLeftBottom, newTopRight);
@@ -2607,13 +2432,11 @@
}
private ReferencedEnvelope addDefaultMargin(ReferencedEnvelope bounds) {
- return JTSUtil.expandEnvelope(bounds,
- Math.max(0, defaultMaxMapExtendMode));
+ return JTSUtil.expandEnvelope(bounds, Math.max(0, defaultMaxMapExtendMode));
}
private Envelope addDefaultMargin(Envelope bounds) {
- return JTSUtil.expandEnvelope(bounds,
- Math.max(0, defaultMaxMapExtendMode));
+ return JTSUtil.expandEnvelope(bounds, Math.max(0, defaultMaxMapExtendMode));
}
/**
@@ -2635,8 +2458,7 @@
* position in window coordinates
* @param zoomFaktor
* > 1 for zoom out, < 1 for zoom in. Default is .5
- * @retun <code>true</code> if {@link #mapArea} has changed and a repaint is
- * triggered
+ * @retun <code>true</code> if {@link #mapArea} has changed and a repaint is triggered
*/
public boolean zoomTo(Point center, Double zoomFaktor) {
if (zoomFaktor == null || zoomFaktor == 0.)
@@ -2645,8 +2467,7 @@
final Point2D gcenter = getScreenToWorld().transform(center, null);
center = null;
- if (Double.isNaN(gcenter.getX()) || Double.isNaN(gcenter.getY())
- || Double.isInfinite(gcenter.getX())
+ if (Double.isNaN(gcenter.getX()) || Double.isNaN(gcenter.getY()) || Double.isInfinite(gcenter.getX())
|| Double.isInfinite(gcenter.getY())
) {
@@ -2657,24 +2478,21 @@
final Envelope mapArea = getMapArea();
final Envelope newMapArea = new Envelope(mapArea);
- newMapArea.expandBy(
- (mapArea.getWidth() * zoomFaktor - mapArea.getWidth()) / 2.,
- (mapArea.getHeight() * zoomFaktor - mapArea.getHeight()) / 2.);
+ newMapArea.expandBy((mapArea.getWidth() * zoomFaktor - mapArea.getWidth()) / 2., (mapArea.getHeight()
+ * zoomFaktor - mapArea.getHeight()) / 2.);
// // Move the newMapArea above the new center if we zoom in:
- newMapArea.translate(gcenter.getX() - mapArea.centre().x,
- gcenter.getY() - mapArea.centre().y);
+ newMapArea.translate(gcenter.getX() - mapArea.centre().x, gcenter.getY() - mapArea.centre().y);
return setMapArea(newMapArea);
}
/**
- * Zooms in or out in a way, that the given {@link Point} on the map stays
- * at the same positino in screen coordinates.
+ * Zooms in or out in a way, that the given {@link Point} on the map stays at the same positino in screen
+ * coordinates.
*
* @param point
- * fixed {@link Point} in screen coordinates that will be at the
- * same screen position after zoom.
+ * fixed {@link Point} in screen coordinates that will be at the same screen position after zoom.
*/
public boolean zoomTowards(Point point, Double zFactor) {
final Point2D mapCoord = getScreenToWorld().transform(point, null);
@@ -2683,36 +2501,29 @@
}
/**
- * Zooms in or out in a way, that the given {@link Point} on the map stays
- * at the same positino in screen coordinates.
+ * Zooms in or out in a way, that the given {@link Point} on the map stays at the same positino in screen
+ * coordinates.
*
* @param point
- * fixed {@link Point2D} in map CRS coordinates that will be at
- * the same screen position after zoom.
+ * fixed {@link Point2D} in map CRS coordinates that will be at the same screen position after zoom.
*/
public boolean zoomTowards(Point2D coordinate, Double zFactor) {
final Point2D mapCoord = coordinate;
- double relX = (mapCoord.getX() - getMapArea().getMinX())
- / getMapArea().getWidth();
- double relY = (mapCoord.getY() - getMapArea().getMinY())
- / getMapArea().getHeight();
+ double relX = (mapCoord.getX() - getMapArea().getMinX()) / getMapArea().getWidth();
+ double relY = (mapCoord.getY() - getMapArea().getMinY()) / getMapArea().getHeight();
// Neuen Karten-Ausschnitt berechnen
- Coordinate ll = new Coordinate(mapCoord.getX()
- - getMapArea().getWidth() * relX * zFactor, mapCoord.getY()
+ Coordinate ll = new Coordinate(mapCoord.getX() - getMapArea().getWidth() * relX * zFactor, mapCoord.getY()
- getMapArea().getHeight() * relY * zFactor);
- Coordinate ur = new Coordinate(mapCoord.getX()
- + getMapArea().getWidth() * (1 - relX) * zFactor,
- mapCoord.getY() + getMapArea().getHeight() * (1 - relY)
- * zFactor);
+ Coordinate ur = new Coordinate(mapCoord.getX() + getMapArea().getWidth() * (1 - relX) * zFactor,
+ mapCoord.getY() + getMapArea().getHeight() * (1 - relY) * zFactor);
return setMapArea(new Envelope(ll, ur));
}
/**
- * Shall non-fatal rendering exceptions be reported in the mappane or be
- * dropped quitely.
+ * Shall non-fatal rendering exceptions be reported in the mappane or be dropped quitely.
*/
public void setShowExceptions(final boolean showExceptions) {
this.showExceptions = showExceptions;
@@ -2730,14 +2541,13 @@
}
/**
- * Setzt den Kartenausschnitt auf die Ausdehnung eines bestimmten Layers.
- * Macht nichts, wenn {@code null} uebergeben wird.
+ * Setzt den Kartenausschnitt auf die Ausdehnung eines bestimmten Layers. Macht nichts, wenn {@code null} uebergeben
+ * wird.
*
* <br>
*
* @param switchCrs
- * if <code>true</code>, the mapcontext will be switched to use
- * the CRS of the layer
+ * if <code>true</code>, the mapcontext will be switched to use the CRS of the layer
* @param layer
* ein Layer
*/
@@ -2747,33 +2557,25 @@
try {
if (switchCrs) {
- final FeatureSource<? extends FeatureType, ? extends Feature> featureSource = layer
- .getFeatureSource();
- final CoordinateReferenceSystem coordinateReferenceSystem = featureSource
- .getSchema().getCoordinateReferenceSystem();
- getMapContext().setCoordinateReferenceSystem(
- coordinateReferenceSystem);
+ final FeatureSource<? extends FeatureType, ? extends Feature> featureSource = layer.getFeatureSource();
+ final CoordinateReferenceSystem coordinateReferenceSystem = featureSource.getSchema()
+ .getCoordinateReferenceSystem();
+ getMapContext().setCoordinateReferenceSystem(coordinateReferenceSystem);
}
// BB umrechnen von Layer-CRS in Map-CRS
- final CoordinateReferenceSystem targetCRS = getMapContext()
- .getCoordinateReferenceSystem();
- CoordinateReferenceSystem sourceCRS = layer.getFeatureSource()
- .getSchema().getCoordinateReferenceSystem();
+ final CoordinateReferenceSystem targetCRS = getMapContext().getCoordinateReferenceSystem();
+ CoordinateReferenceSystem sourceCRS = layer.getFeatureSource().getSchema().getCoordinateReferenceSystem();
if (sourceCRS == null) {
- sourceCRS = layer.getFeatureSource().getSchema()
- .getGeometryDescriptor().getCoordinateReferenceSystem();
- LOGGER.info("CRS for "
- + layer.getTitle()
- + " could not be determined from schema, trying GeometryDescriptor results: "
- + sourceCRS);
+ sourceCRS = layer.getFeatureSource().getSchema().getGeometryDescriptor().getCoordinateReferenceSystem();
+ LOGGER.info("CRS for " + layer.getTitle()
+ + " could not be determined from schema, trying GeometryDescriptor results: " + sourceCRS);
}
Envelope mapAreaNew;
if (!CRS.equalsIgnoreMetadata(sourceCRS, targetCRS)) {
- mapAreaNew = JTSUtil.transformEnvelope(layer.getFeatureSource()
- .getBounds(), sourceCRS, targetCRS);
+ mapAreaNew = JTSUtil.transformEnvelope(layer.getFeatureSource().getBounds(), sourceCRS, targetCRS);
} else {
try {
mapAreaNew = layer.getFeatureSource().getBounds();
@@ -2783,38 +2585,21 @@
/**
*
- 23.10.2009 11:20:50
- * org.geotools.data.shapefile.shp.PolygonHandler read
- * WARNUNG: only one hole in this polygon record ERROR
- * JMapPane zoomToLayer Zoom to layer did not terminate
- * correctly java.lang.IllegalArgumentException: Points of
- * LinearRing do not form a closed linestring at
- * com.vividsolutions
- * .jts.geom.LinearRing.validateConstruction
- * (LinearRing.java:105) at
- * com.vividsolutions.jts.geom.LinearRing
- * .<init>(LinearRing.java:100) at
- * com.vividsolutions.jts.geom
- * .GeometryFactory.createLinearRing
- * (GeometryFactory.java:339) at
- * org.geotools.data.shapefile.
- * shp.PolygonHandler.read(PolygonHandler.java:188) at
- * org.geotools
- * .data.shapefile.shp.ShapefileReader$Record.shape
- * (ShapefileReader.java:106) at
- * org.geotools.data.shapefile.
- * ShapefileAttributeReader.next(
- * ShapefileAttributeReader.java:157) at
- * org.geotools.data.shapefile
- * .indexed.IndexedShapefileAttributeReader
- * .next(IndexedShapefileAttributeReader.java:122) at
- * org.geotools
+ 23.10.2009 11:20:50 org.geotools.data.shapefile.shp.PolygonHandler read WARNUNG: only one hole in
+ * this polygon record ERROR JMapPane zoomToLayer Zoom to layer did not terminate correctly
+ * java.lang.IllegalArgumentException: Points of LinearRing do not form a closed linestring at
+ * com.vividsolutions .jts.geom.LinearRing.validateConstruction (LinearRing.java:105) at
+ * com.vividsolutions.jts.geom.LinearRing .<init>(LinearRing.java:100) at
+ * com.vividsolutions.jts.geom .GeometryFactory.createLinearRing (GeometryFactory.java:339) at
+ * org.geotools.data.shapefile. shp.PolygonHandler.read(PolygonHandler.java:188) at org.geotools
+ * .data.shapefile.shp.ShapefileReader$Record.shape (ShapefileReader.java:106) at
+ * org.geotools.data.shapefile. ShapefileAttributeReader.next( ShapefileAttributeReader.java:157) at
+ * org.geotools.data.shapefile .indexed.IndexedShapefileAttributeReader
+ * .next(IndexedShapefileAttributeReader.java:122) at org.geotools
* .data.FIDFeatureReader.next(FIDFeatureReader.java:96) at
- * org.geotools.data.FIDFeatureReader.next(FIDFeatureReader.
- * java:55) at org.geotools.data.MaxFeatureReader.next(
- * MaxFeatureReader.java:61) at
- * org.geotools.data.MaxFeatureReader
- * .next(MaxFeatureReader.java:61)
+ * org.geotools.data.FIDFeatureReader.next(FIDFeatureReader. java:55) at
+ * org.geotools.data.MaxFeatureReader.next( MaxFeatureReader.java:61) at
+ * org.geotools.data.MaxFeatureReader .next(MaxFeatureReader.java:61)
**/
}
}
@@ -2844,8 +2629,7 @@
* A refresh of the map is not done automatically
*
* @param index
- * Index of the {@link MapLayer} in the {@link MapContext} (from
- * back to top)
+ * Index of the {@link MapLayer} in the {@link MapContext} (from back to top)
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
@@ -2856,9 +2640,8 @@
}
/**
- * Zooms the {@link SelectableXMapPane} to the {@link Envelope} of the
- * selected layer. The layer is selected by the idx, counting from front to
- * back, like humans would expect in a {@link JList}
+ * Zooms the {@link SelectableXMapPane} to the {@link Envelope} of the selected layer. The layer is selected by the
+ * idx, counting from front to back, like humans would expect in a {@link JList}
*
* <br>
* A refresh of the map is not done automatically
@@ -2866,8 +2649,7 @@
*
*
* @param index
- * Reverse index of the {@link MapLayer} in the
- * {@link MapContext}
+ * Reverse index of the {@link MapLayer} in the {@link MapContext}
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
*/
@@ -2876,8 +2658,7 @@
}
/**
- * Aktiviert oder deaktiviert das AntiAliasing for diese
- * {@link SelectableXMapPane}. AntiALiasing ist besonders fuer
+ * Aktiviert oder deaktiviert das AntiAliasing for diese {@link SelectableXMapPane}. AntiALiasing ist besonders fuer
* Textbeschriftung sehr schoen, verbraucht aber auch mehr Performance.
*
* @author <a href="mailto:tzeggai at wikisquare.de">Stefan Alfons Tzeggai</a>
@@ -2889,15 +2670,12 @@
java2DHints = GeoTools.getDefaultHints();
}
- java2DHints.put(RenderingHints.KEY_ANTIALIASING,
- aa ? RenderingHints.VALUE_ANTIALIAS_ON
- : RenderingHints.VALUE_ANTIALIAS_OFF);
- java2DHints.put(RenderingHints.KEY_TEXT_ANTIALIASING,
- aa ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON
- : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
- java2DHints.put(RenderingHints.KEY_RENDERING,
- aa ? RenderingHints.VALUE_RENDER_QUALITY
- : RenderingHints.VALUE_RENDER_SPEED);
+ java2DHints.put(RenderingHints.KEY_ANTIALIASING, aa ? RenderingHints.VALUE_ANTIALIAS_ON
+ : RenderingHints.VALUE_ANTIALIAS_OFF);
+ java2DHints.put(RenderingHints.KEY_TEXT_ANTIALIASING, aa ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON
+ : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
+ java2DHints.put(RenderingHints.KEY_RENDERING, aa ? RenderingHints.VALUE_RENDER_QUALITY
+ : RenderingHints.VALUE_RENDER_SPEED);
}
@@ -2906,14 +2684,11 @@
}
/**
- * If {@link #maxExtend} is <code>null</code> the following rules are used
- * to create a default maximum.
+ * If {@link #maxExtend} is <code>null</code> the following rules are used to create a default maximum.
* <ul>
- * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no
- * margin</li>
+ * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no margin</li>
* <li>Values 0 : grow to fit the monitors aspect ratio, no margin</li>
- * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a
- * relative margin</li>
+ * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a relative margin</li>
* </ul>
* **/
public void setDefaultMaxMapExtendMode(double defaultMaxMapExtendMode) {
@@ -2921,14 +2696,11 @@
}
/**
- * If {@link #maxExtend} is <code>null</code> the following rules are used
- * to create a default maximum.
+ * If {@link #maxExtend} is <code>null</code> the following rules are used to create a default maximum.
* <ul>
- * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no
- * margin</li>
+ * <li>Values < 0 : don't grow to fit the monitors aspect ratio, no margin</li>
* <li>Values 0 : grow to fit the monitors aspect ratio, no margin</li>
- * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a
- * relative margin</li>
+ * <li>Values > 0 : grow to fit the monitors aspect ratio, and add a relative margin</li>
* </ul>
* **/
public double getDefaultMaxMapExtendMode() {
@@ -2944,8 +2716,7 @@
private String renderLanguage;
/**
- * The job of the BlinkTimer is to remove the features painted in BLINK
- * style again.
+ * The job of the BlinkTimer is to remove the features painted in BLINK style again.
*/
private Timer initBlinkTimer() {
Timer timer = new Timer(BLINK_TIMER_DEPLAY, new ActionListener() {
@@ -2965,8 +2736,7 @@
* Makes the given {@link SimpleFeature} bink in the map for a moment
*/
public void blink(SimpleFeature feature) {
- MemoryFeatureCollection memoryFeatureCollection = new MemoryFeatureCollection(
- feature.getFeatureType());
+ MemoryFeatureCollection memoryFeatureCollection = new MemoryFeatureCollection(feature.getFeatureType());
memoryFeatureCollection.add(feature);
blink(memoryFeatureCollection);
}
@@ -2974,20 +2744,17 @@
/**
* Makes the given {@link FeatureCollection} bink in the map for a moment
*/
- public void blink(
- FeatureCollection<SimpleFeatureType, SimpleFeature> features) {
+ public void blink(FeatureCollection<SimpleFeatureType, SimpleFeature> features) {
{
if (stopBlinkTimer != null)
stopBlinkTimer.stop();
repaint();
stopBlinkTimer = initBlinkTimer();
- DefaultMapContext mc = new DefaultMapContext(getMapContext()
- .getCoordinateReferenceSystem());
+ DefaultMapContext mc = new DefaultMapContext(getMapContext().getCoordinateReferenceSystem());
Style style = StylingUtil.STYLE_FACTORY.createStyle();
- style.featureTypeStyles().add(
- StylingUtil.createBlinkFeatureTypeStyle(features));
+ style.featureTypeStyles().add(StylingUtil.createBlinkFeatureTypeStyle(features));
// style = StylingUtil.createStyleSimple(features, Color.pink,
// Color.WHITE);
@@ -3007,12 +2774,11 @@
}
/**
- * Set a specific language for rendering. The value will be inserted into a
- * {@link EnvFunction} variable before rendering.
+ * Set a specific language for rendering. The value will be inserted into a {@link EnvFunction} variable before
+ * rendering.
*
* @param e
- * .g. "de" or <code>null</code> (default) if no specific
- * langauge should be set.
+ * .g. "de" or <code>null</code> (default) if no specific langauge should be set.
*
*/
public void setRenderLanguage(String renderLanguage) {
@@ -3020,12 +2786,11 @@
}
/**
- * Return any a specific language set for rendering. The value will be
- * inserted into a {@link EnvFunction} variable before rendering.
+ * Return any a specific language set for rendering. The value will be inserted into a {@link EnvFunction} variable
+ * before rendering.
*
* @param e
- * .g. "de" or <code>null</code> (default) if no specific
- * langauge should be set.
+ * .g. "de" or <code>null</code> (default) if no specific langauge should be set.
*
*/
public String getRenderLanguage() {
@@ -3039,27 +2804,22 @@
final static double OGC_DEGREE_TO_METERS = 6378137.0 * 2.0 * Math.PI / 360;
/**
- * Zooms to the given Scale without changing the center of the map (if
- * possible due to mapMaxExtend restrictions.
+ * Zooms to the given Scale without changing the center of the map (if possible due to mapMaxExtend restrictions.
*/
public void zoomToScaleDenominator(double scaleDenominator) {
// if it's geodetic, we're dealing with lat/lon unit measures
- Double newScale = calculateScaleDenominatortoScale(scaleDenominator,
- getMapArea().getWidth());
+ Double newScale = calculateScaleDenominatortoScale(scaleDenominator, getMapArea().getWidth());
double zFactor = newScale / getScale();
- zoomTowards(new Point2D.Double(getMapArea().getMedian(0), getMapArea()
- .getMedian(1)), zFactor);
+ zoomTowards(new Point2D.Double(getMapArea().getMedian(0), getMapArea().getMedian(1)), zFactor);
}
/**
- * Converts an OGC ScaleDenominator to a Scale as retuned by
- * {@link #getScale()}
+ * Converts an OGC ScaleDenominator to a Scale as retuned by {@link #getScale()}
*/
- public Double calculateScaleDenominatortoScale(double scaleDenominator,
- double width2) {
+ public Double calculateScaleDenominatortoScale(double scaleDenominator, double width2) {
final double d = width2 / RendererUtilities.getDpi(null) * 0.0254;
if (getMapArea().getCoordinateReferenceSystem() instanceof GeographicCRS) {
More information about the Schmitzm-commits
mailing list