[jmapviewer] 01/06: Imported Upstream version 1.15+dfsg
Sebastiaan Couwenberg
sebastic at moszumanska.debian.org
Tue Mar 1 21:26:14 UTC 2016
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to branch master
in repository jmapviewer.
commit c84ae8ccad561ed1607526d95c9f4bb6df3720a5
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date: Tue Mar 1 06:35:20 2016 +0100
Imported Upstream version 1.15+dfsg
---
build.xml | 2 +-
.../gui/jmapviewer/AttributionSupport.java | 2 +-
.../gui/jmapviewer/DefaultMapController.java | 5 +-
src/org/openstreetmap/gui/jmapviewer/Demo.java | 3 +-
.../openstreetmap/gui/jmapviewer/JMapViewer.java | 161 +++++++++++++++++++--
.../gui/jmapviewer/JMapViewerTree.java | 3 +-
src/org/openstreetmap/gui/jmapviewer/Layer.java | 2 +-
.../openstreetmap/gui/jmapviewer/OsmMercator.java | 2 +-
.../gui/jmapviewer/OsmTileLoader.java | 14 +-
src/org/openstreetmap/gui/jmapviewer/Style.java | 2 +-
.../jmapviewer/checkBoxTree/CheckBoxNodeData.java | 2 +-
.../checkBoxTree/CheckBoxNodeEditor.java | 2 +-
.../jmapviewer/checkBoxTree/CheckBoxNodePanel.java | 2 +-
.../checkBoxTree/CheckBoxNodeRenderer.java | 6 +-
.../jmapviewer/interfaces/TileClearController.java | 2 +-
.../tilesources/AbstractOsmTileSource.java | 8 +-
.../tilesources/AbstractTMSTileSource.java | 81 +++++------
.../tilesources/BingAerialTileSource.java | 2 +-
.../tilesources/MapQuestOsmTileSource.java | 2 +-
.../gui/jmapviewer/tilesources/TMSTileSource.java | 53 +++++++
.../gui/jmapviewer/tilesources/TileSourceInfo.java | 22 ++-
21 files changed, 290 insertions(+), 88 deletions(-)
diff --git a/build.xml b/build.xml
index a96296e..b13ba03 100644
--- a/build.xml
+++ b/build.xml
@@ -77,7 +77,7 @@
<target name="checkstyle">
<taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties"
- classpath="tools/checkstyle/checkstyle-6.14-all.jar"/>
+ classpath="tools/checkstyle/checkstyle-6.16-all.jar"/>
<checkstyle config="tools/checkstyle/jmapviewer_checks.xml">
<fileset dir="${basedir}/src" includes="**/*.java" />
<formatter type="xml" toFile="checkstyle-jmapviewer.xml"/>
diff --git a/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java b/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
index 15111b9..d038e25 100644
--- a/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
+++ b/src/org/openstreetmap/gui/jmapviewer/AttributionSupport.java
@@ -53,7 +53,7 @@ public class AttributionSupport {
}
}
- public void paintAttribution(Graphics g, int width, int height, ICoordinate topLeft, ICoordinate bottomRight,
+ public void paintAttribution(Graphics g, int width, int height, ICoordinate topLeft, ICoordinate bottomRight,
int zoom, ImageObserver observer) {
if (source == null || !source.requiresAttribution()) {
attrToUBounds = null;
diff --git a/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java b/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
index 7721045..7b5e75f 100644
--- a/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
+++ b/src/org/openstreetmap/gui/jmapviewer/DefaultMapController.java
@@ -44,7 +44,7 @@ MouseWheelListener {
if (!movementEnabled || !isMoving)
return;
// Is only the selected mouse button pressed?
- if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == movementMouseButtonMask
+ if ((e.getModifiersEx() & MOUSE_BUTTONS_MASK) == movementMouseButtonMask
|| isPlatformOsx() && e.getModifiersEx() == MAC_MOUSE_BUTTON3_MASK) {
Point p = e.getPoint();
if (lastDragPoint != null) {
@@ -82,7 +82,8 @@ MouseWheelListener {
@Override
public void mouseWheelMoved(MouseWheelEvent e) {
if (wheelZoomEnabled) {
- map.setZoom(map.getZoom() - e.getWheelRotation(), e.getPoint());
+ int rotation = JMapViewer.zoomReverseWheel ? -e.getWheelRotation() : e.getWheelRotation();
+ map.setZoom(map.getZoom() - rotation, e.getPoint());
}
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/Demo.java b/src/org/openstreetmap/gui/jmapviewer/Demo.java
index ea507b2..f3ec77b 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Demo.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Demo.java
@@ -62,7 +62,7 @@ public class Demo extends JFrame implements JMapViewerEventListener {
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
- JPanel panel = new JPanel();
+ JPanel panel = new JPanel(new BorderLayout());
JPanel panelTop = new JPanel();
JPanel panelBottom = new JPanel();
JPanel helpPanel = new JPanel();
@@ -75,7 +75,6 @@ public class Demo extends JFrame implements JMapViewerEventListener {
add(panel, BorderLayout.NORTH);
add(helpPanel, BorderLayout.SOUTH);
- panel.setLayout(new BorderLayout());
panel.add(panelTop, BorderLayout.NORTH);
panel.add(panelBottom, BorderLayout.SOUTH);
JLabel helpLabel = new JLabel("Use right mouse button to move,\n "
diff --git a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
index d537dad..91f43fc 100644
--- a/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
@@ -43,14 +43,20 @@ import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource;
*/
public class JMapViewer extends JPanel implements TileLoaderListener {
+ /** whether debug mode is enabled or not */
public static boolean debug;
+ /** option to reverse zoom direction with mouse wheel */
+ public static boolean zoomReverseWheel;
+
/**
* Vectors for clock-wise tile painting
*/
private static final Point[] move = {new Point(1, 0), new Point(0, 1), new Point(-1, 0), new Point(0, -1)};
+ /** Maximum zoom level */
public static final int MAX_ZOOM = 22;
+ /** Minimum zoom level */
public static final int MIN_ZOOM = 0;
protected transient List<MapMarker> mapMarkerList;
@@ -81,8 +87,13 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
protected JButton zoomInButton;
protected JButton zoomOutButton;
+ /**
+ * Apparence of zoom controls.
+ */
public enum ZOOM_BUTTON_STYLE {
+ /** Zoom buttons are displayed horizontally (default) */
HORIZONTAL,
+ /** Zoom buttons are displayed vertically */
VERTICAL
}
@@ -109,7 +120,8 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
/**
* Creates a new {@link JMapViewer} instance.
* @param tileCache The cache where to store tiles
- * @deprecated @param downloadThreadCount not used anymore
+ * @param downloadThreadCount not used anymore
+ * @deprecated use {@link #JMapViewer(TileCache)}
*/
@Deprecated
public JMapViewer(TileCache tileCache, int downloadThreadCount) {
@@ -227,10 +239,23 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
setDisplayPosition(mapPoint, p.x, p.y, zoom);
}
+ /**
+ * Sets the display position.
+ * @param x X coordinate
+ * @param y Y coordinate
+ * @param zoom zoom level, between {@link #MIN_ZOOM} and {@link #MAX_ZOOM}
+ */
public void setDisplayPosition(int x, int y, int zoom) {
setDisplayPosition(new Point(getWidth() / 2, getHeight() / 2), x, y, zoom);
}
+ /**
+ * Sets the display position.
+ * @param mapPoint map point
+ * @param x X coordinate
+ * @param y Y coordinate
+ * @param zoom zoom level, between {@link #MIN_ZOOM} and {@link #MAX_ZOOM}
+ */
public void setDisplayPosition(Point mapPoint, int x, int y, int zoom) {
if (zoom > tileController.getTileSource().getMaxZoom() || zoom < MIN_ZOOM)
return;
@@ -454,8 +479,8 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
* @return Integer the radius in pixels
*/
public Integer getLatOffset(double lat, double lon, double offset, boolean checkOutside) {
- Point p = tileSource.latLonToXY(lat, lon, zoom);
- int y = p.y - center.y - getHeight() / 2;
+ Point p = tileSource.latLonToXY(lat + offset, lon, zoom);
+ int y = p.y - (center.y - getHeight() / 2);
if (checkOutside && (y < 0 || y > getHeight())) {
return null;
}
@@ -863,8 +888,7 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
* derived implementations for adapting zoom dependent values. The new zoom
* level can be obtained via {@link #getZoom()}.
*
- * @param oldZoom
- * the previous zoom level
+ * @param oldZoom the previous zoom level
*/
protected void zoomChanged(int oldZoom) {
zoomSlider.setToolTipText("Zoom level " + zoom);
@@ -874,15 +898,27 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
zoomInButton.setEnabled(zoom < tileController.getTileSource().getMaxZoom());
}
+ /**
+ * Determines whether the tile grid is visible or not.
+ * @return {@code true} if the tile grid is visible, {@code false} otherwise
+ */
public boolean isTileGridVisible() {
return tileGridVisible;
}
+ /**
+ * Sets whether the tile grid is visible or not.
+ * @param tileGridVisible {@code true} if the tile grid is visible, {@code false} otherwise
+ */
public void setTileGridVisible(boolean tileGridVisible) {
this.tileGridVisible = tileGridVisible;
repaint();
}
+ /**
+ * Determines whether {@link MapMarker}s are painted or not.
+ * @return {@code true} if {@link MapMarker}s are painted, {@code false} otherwise
+ */
public boolean getMapMarkersVisible() {
return mapMarkersVisible;
}
@@ -899,88 +935,157 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
repaint();
}
+ /**
+ * Sets the list of {@link MapMarker}s.
+ * @param mapMarkerList list of {@link MapMarker}s
+ */
public void setMapMarkerList(List<MapMarker> mapMarkerList) {
this.mapMarkerList = mapMarkerList;
repaint();
}
+ /**
+ * Returns the list of {@link MapMarker}s.
+ * @return list of {@link MapMarker}s
+ */
public List<MapMarker> getMapMarkerList() {
return mapMarkerList;
}
+ /**
+ * Sets the list of {@link MapRectangle}s.
+ * @param mapRectangleList list of {@link MapRectangle}s
+ */
public void setMapRectangleList(List<MapRectangle> mapRectangleList) {
this.mapRectangleList = mapRectangleList;
repaint();
}
+ /**
+ * Returns the list of {@link MapRectangle}s.
+ * @return list of {@link MapRectangle}s
+ */
public List<MapRectangle> getMapRectangleList() {
return mapRectangleList;
}
+ /**
+ * Sets the list of {@link MapPolygon}s.
+ * @param mapPolygonList list of {@link MapPolygon}s
+ */
public void setMapPolygonList(List<MapPolygon> mapPolygonList) {
this.mapPolygonList = mapPolygonList;
repaint();
}
+ /**
+ * Returns the list of {@link MapPolygon}s.
+ * @return list of {@link MapPolygon}s
+ */
public List<MapPolygon> getMapPolygonList() {
return mapPolygonList;
}
+ /**
+ * Add a {@link MapMarker}.
+ * @param marker map marker to add
+ */
public void addMapMarker(MapMarker marker) {
mapMarkerList.add(marker);
repaint();
}
+ /**
+ * Remove a {@link MapMarker}.
+ * @param marker map marker to remove
+ */
public void removeMapMarker(MapMarker marker) {
mapMarkerList.remove(marker);
repaint();
}
+ /**
+ * Remove all {@link MapMarker}s.
+ */
public void removeAllMapMarkers() {
mapMarkerList.clear();
repaint();
}
+ /**
+ * Add a {@link MapRectangle}.
+ * @param rectangle map rectangle to add
+ */
public void addMapRectangle(MapRectangle rectangle) {
mapRectangleList.add(rectangle);
repaint();
}
+ /**
+ * Remove a {@link MapRectangle}.
+ * @param rectangle map rectangle to remove
+ */
public void removeMapRectangle(MapRectangle rectangle) {
mapRectangleList.remove(rectangle);
repaint();
}
+ /**
+ * Remove all {@link MapRectangle}s.
+ */
public void removeAllMapRectangles() {
mapRectangleList.clear();
repaint();
}
+ /**
+ * Add a {@link MapPolygon}.
+ * @param polygon map polygon to add
+ */
public void addMapPolygon(MapPolygon polygon) {
mapPolygonList.add(polygon);
repaint();
}
+ /**
+ * Remove a {@link MapPolygon}.
+ * @param polygon map polygon to remove
+ */
public void removeMapPolygon(MapPolygon polygon) {
mapPolygonList.remove(polygon);
repaint();
}
+ /**
+ * Remove all {@link MapPolygon}s.
+ */
public void removeAllMapPolygons() {
mapPolygonList.clear();
repaint();
}
+ /**
+ * Sets whether zoom controls are displayed or not.
+ * @param visible {@code true} if zoom controls are displayed, {@code false} otherwise
+ */
public void setZoomContolsVisible(boolean visible) {
zoomSlider.setVisible(visible);
zoomInButton.setVisible(visible);
zoomOutButton.setVisible(visible);
}
+ /**
+ * Determines whether zoom controls are displayed or not.
+ * @return {@code true} if zoom controls are displayed, {@code false} otherwise
+ */
public boolean getZoomControlsVisible() {
return zoomSlider.isVisible();
}
+ /**
+ * Sets the tile source.
+ * @param tileSource tile source
+ */
public void setTileSource(TileSource tileSource) {
if (tileSource.getMaxZoom() > MAX_ZOOM)
throw new RuntimeException("Maximum zoom level too high");
@@ -1006,12 +1111,16 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
repaint();
}
+ /**
+ * Determines whether the {@link MapRectangle}s are painted or not.
+ * @return {@code true} if the {@link MapRectangle}s are painted, {@code false} otherwise
+ */
public boolean isMapRectanglesVisible() {
return mapRectanglesVisible;
}
/**
- * Enables or disables painting of the {@link MapRectangle}
+ * Enables or disables painting of the {@link MapRectangle}s.
*
* @param mapRectanglesVisible {@code true} to enable painting of rectangles
* @see #addMapRectangle(MapRectangle)
@@ -1022,12 +1131,16 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
repaint();
}
+ /**
+ * Determines whether the {@link MapPolygon}s are painted or not.
+ * @return {@code true} if the {@link MapPolygon}s are painted, {@code false} otherwise
+ */
public boolean isMapPolygonsVisible() {
return mapPolygonsVisible;
}
/**
- * Enables or disables painting of the {@link MapPolygon}
+ * Enables or disables painting of the {@link MapPolygon}s.
*
* @param mapPolygonsVisible {@code true} to enable painting of polygons
* @see #addMapPolygon(MapPolygon)
@@ -1038,35 +1151,47 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
repaint();
}
+ /**
+ * Determines whether scroll wrap is enabled or not.
+ * @return {@code true} if scroll wrap is enabled, {@code false} otherwise
+ */
public boolean isScrollWrapEnabled() {
return scrollWrapEnabled;
}
+ /**
+ * Sets whether scroll wrap is enabled or not.
+ * @param scrollWrapEnabled {@code true} if scroll wrap is enabled, {@code false} otherwise
+ */
public void setScrollWrapEnabled(boolean scrollWrapEnabled) {
this.scrollWrapEnabled = scrollWrapEnabled;
repaint();
}
+ /**
+ * Returns the zoom controls apparence style (horizontal/vertical).
+ * @return {@link ZOOM_BUTTON_STYLE#VERTICAL} or {@link ZOOM_BUTTON_STYLE#HORIZONTAL}
+ */
public ZOOM_BUTTON_STYLE getZoomButtonStyle() {
return zoomButtonStyle;
}
+ /**
+ * Sets the zoom controls apparence style (horizontal/vertical).
+ * @param style {@link ZOOM_BUTTON_STYLE#VERTICAL} or {@link ZOOM_BUTTON_STYLE#HORIZONTAL}
+ */
public void setZoomButtonStyle(ZOOM_BUTTON_STYLE style) {
zoomButtonStyle = style;
if (zoomSlider == null || zoomInButton == null || zoomOutButton == null) {
return;
}
switch (style) {
- case HORIZONTAL:
- zoomSlider.setBounds(10, 10, 30, 150);
- zoomInButton.setBounds(4, 155, 18, 18);
- zoomOutButton.setBounds(26, 155, 18, 18);
- break;
case VERTICAL:
zoomSlider.setBounds(10, 27, 30, 150);
zoomInButton.setBounds(14, 8, 20, 20);
zoomOutButton.setBounds(14, 176, 20, 20);
break;
+ case HORIZONTAL:
default:
zoomSlider.setBounds(10, 10, 30, 150);
zoomInButton.setBounds(4, 155, 18, 18);
@@ -1076,6 +1201,10 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
repaint();
}
+ /**
+ * Returns the tile controller.
+ * @return the tile controller
+ */
public TileController getTileController() {
return tileController;
}
@@ -1089,10 +1218,18 @@ public class JMapViewer extends JPanel implements TileLoaderListener {
return tileController.getTileCache();
}
+ /**
+ * Sets the tile loader.
+ * @param loader tile loader
+ */
public void setTileLoader(TileLoader loader) {
tileController.setTileLoader(loader);
}
+ /**
+ * Returns attribution.
+ * @return attribution
+ */
public AttributionSupport getAttribution() {
return attribution;
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java b/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
index c7fb93f..8f6cbf7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
+++ b/src/org/openstreetmap/gui/jmapviewer/JMapViewerTree.java
@@ -43,8 +43,7 @@ public class JMapViewerTree extends JPanel {
splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
tree = new CheckBoxTree(name);
- treePanel = new JPanel();
- treePanel.setLayout(new BorderLayout());
+ treePanel = new JPanel(new BorderLayout());
treePanel.add(tree, BorderLayout.CENTER);
treePanel.add(new JLabel("<html><center>Use right mouse button to<br />show/hide texts</center></html>"), BorderLayout.SOUTH);
map = new JMapViewer();
diff --git a/src/org/openstreetmap/gui/jmapviewer/Layer.java b/src/org/openstreetmap/gui/jmapviewer/Layer.java
index b31e73a..405e6b7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Layer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Layer.java
@@ -7,7 +7,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.MapObject;
public class Layer extends AbstractLayer {
private List<MapObject> elements;
-
+
public Layer(String name) {
super(name);
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
index f475e8a..6f89d33 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
@@ -21,7 +21,7 @@ public class OsmMercator {
/** minimum latitude (south) for mercator display */
public static final double MIN_LAT = -85.05112877980659;
/** equatorial earth radius for EPSG:3857 (Mercator) */
- private static double EARTH_RADIUS = 6378137;
+ public static final double EARTH_RADIUS = 6378137;
/**
* instance with tile size of 256 for easy conversions
diff --git a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
index 3aac681..02c451e 100644
--- a/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
+++ b/src/org/openstreetmap/gui/jmapviewer/OsmTileLoader.java
@@ -9,8 +9,8 @@ import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadPoolExecutor;
import org.openstreetmap.gui.jmapviewer.interfaces.TileJob;
import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
@@ -22,7 +22,7 @@ import org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener;
* @author Jan Peter Stotz
*/
public class OsmTileLoader implements TileLoader {
- private static final Executor jobDispatcher = Executors.newSingleThreadExecutor();
+ private static final ThreadPoolExecutor jobDispatcher = (ThreadPoolExecutor) Executors.newFixedThreadPool(3);
private final class OsmTileJob implements TileJob {
private final Tile tile;
@@ -183,6 +183,14 @@ public class OsmTileLoader implements TileLoader {
@Override
public void cancelOutstandingTasks() {
- // intentionally left empty - OsmTileLoader doesn't maintain queue
+ jobDispatcher.getQueue().clear();
+ }
+
+ /**
+ * Sets the maximum number of concurrent connections the tile loader will do
+ * @param num number of conncurent connections
+ */
+ public static void setConcurrentConnections(int num) {
+ jobDispatcher.setMaximumPoolSize(num);
}
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/Style.java b/src/org/openstreetmap/gui/jmapviewer/Style.java
index 1302d83..7e4a315 100644
--- a/src/org/openstreetmap/gui/jmapviewer/Style.java
+++ b/src/org/openstreetmap/gui/jmapviewer/Style.java
@@ -11,7 +11,7 @@ public class Style {
private Color backColor;
private Stroke stroke;
private Font font;
-
+
private static final AlphaComposite TRANSPARENCY = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
private static final AlphaComposite OPAQUE = AlphaComposite.getInstance(AlphaComposite.SRC);
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
index 47e2114..7024a75 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeData.java
@@ -6,7 +6,7 @@ import org.openstreetmap.gui.jmapviewer.LayerGroup;
/**
* Node Data for checkBox Tree
- *
+ *
* @author galo
*/
public class CheckBoxNodeData {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
index 3c57ca7..4c750f5 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeEditor.java
@@ -16,7 +16,7 @@ import javax.swing.tree.TreePath;
/**
* Editor for checkBox Tree
- *
+ *
* @author galo
*/
public class CheckBoxNodeEditor extends AbstractCellEditor implements TreeCellEditor {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
index ce04747..0653e35 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodePanel.java
@@ -10,7 +10,7 @@ import javax.swing.JPanel;
/**
* Node Panel for checkBox Tree
- *
+ *
* @author galo
*/
public class CheckBoxNodePanel extends JPanel {
diff --git a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
index dcb7de9..f8e2609 100644
--- a/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
+++ b/src/org/openstreetmap/gui/jmapviewer/checkBoxTree/CheckBoxNodeRenderer.java
@@ -14,7 +14,7 @@ import javax.swing.tree.TreeCellRenderer;
/**
* Renderer for checkBox Tree
- *
+ *
* @author galo
*/
public class CheckBoxNodeRenderer implements TreeCellRenderer {
@@ -101,7 +101,7 @@ public class CheckBoxNodeRenderer implements TreeCellRenderer {
/*
private JPopupMenu createPopupMenu(final AbstractLayer layer) {
JMenuItem menuItem;
-
+
//Create the popup menu.
if (layer.isVisibleTexts()) menuItem = new JMenuItem("hide texts");
else menuItem = new JMenuItem("show texts");
@@ -113,7 +113,7 @@ public class CheckBoxNodeRenderer implements TreeCellRenderer {
setVisibleTexts(layer, !layer.isVisibleTexts());
}
});
-
+
return popup;
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
index 94a5a83..a2fd1b9 100644
--- a/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
+++ b/src/org/openstreetmap/gui/jmapviewer/interfaces/TileClearController.java
@@ -2,7 +2,7 @@
package org.openstreetmap.gui.jmapviewer.interfaces;
import java.io.File;
-
+
public interface TileClearController {
void initClearDir(File dir);
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
index 0210515..d87a64b 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractOsmTileSource.java
@@ -8,14 +8,14 @@ import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
/**
* Abstract class for OSM Tile sources
*/
-public abstract class AbstractOsmTileSource extends AbstractTMSTileSource {
-
+public abstract class AbstractOsmTileSource extends TMSTileSource {
+
/**
- * The OSM attribution. Must be always in line with
+ * The OSM attribution. Must be always in line with
* <a href="https://www.openstreetmap.org/copyright/en">https://www.openstreetmap.org/copyright/en</a>
*/
public static final String DEFAULT_OSM_ATTRIBUTION = "\u00a9 OpenStreetMap contributors";
-
+
/**
* Constructs a new OSM tile source
* @param name Source name as displayed in GUI
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
index b8a2683..38afc21 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/AbstractTMSTileSource.java
@@ -3,12 +3,14 @@ package org.openstreetmap.gui.jmapviewer.tilesources;
import java.awt.Point;
import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
-import org.openstreetmap.gui.jmapviewer.Coordinate;
import org.openstreetmap.gui.jmapviewer.OsmMercator;
import org.openstreetmap.gui.jmapviewer.Tile;
import org.openstreetmap.gui.jmapviewer.TileXY;
@@ -25,10 +27,10 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
protected String name;
protected String baseUrl;
protected String id;
- private final Map<String, String> noTileHeaders;
+ private final Map<String, Set<String>> noTileHeaders;
+ private final Map<String, Set<String>> noTileChecksums;
private final Map<String, String> metadataHeaders;
protected int tileSize;
- protected OsmMercator osmMercator;
/**
* Creates an instance based on TileSource information
@@ -43,9 +45,9 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
}
this.id = info.getUrl();
this.noTileHeaders = info.getNoTileHeaders();
+ this.noTileChecksums = info.getNoTileChecksums();
this.metadataHeaders = info.getMetadataHeaders();
this.tileSize = info.getTileSize();
- this.osmMercator = new OsmMercator(this.tileSize);
}
/**
@@ -123,19 +125,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
}
@Override
- public double getDistance(double lat1, double lon1, double lat2, double lon2) {
- return osmMercator.getDistance(lat1, lon1, lat2, lon2);
- }
-
- @Override
- public Point latLonToXY(double lat, double lon, int zoom) {
- return new Point(
- (int) osmMercator.lonToX(lon, zoom),
- (int) osmMercator.latToY(lat, zoom)
- );
- }
-
- @Override
public Point latLonToXY(ICoordinate point, int zoom) {
return latLonToXY(point.getLat(), point.getLon(), zoom);
}
@@ -146,22 +135,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
}
@Override
- public ICoordinate xyToLatLon(int x, int y, int zoom) {
- return new Coordinate(
- osmMercator.yToLat(y, zoom),
- osmMercator.xToLon(x, zoom)
- );
- }
-
- @Override
- public TileXY latLonToTileXY(double lat, double lon, int zoom) {
- return new TileXY(
- osmMercator.lonToX(lon, zoom) / tileSize,
- osmMercator.latToY(lat, zoom) / tileSize
- );
- }
-
- @Override
public TileXY latLonToTileXY(ICoordinate point, int zoom) {
return latLonToTileXY(point.getLat(), point.getLon(), zoom);
}
@@ -177,14 +150,6 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
}
@Override
- public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
- return new Coordinate(
- osmMercator.yToLat(y * tileSize, zoom),
- osmMercator.xToLon(x * tileSize, zoom)
- );
- }
-
- @Override
public int getTileXMax(int zoom) {
return getTileMax(zoom);
}
@@ -207,17 +172,45 @@ public abstract class AbstractTMSTileSource extends AbstractTileSource {
@Override
public boolean isNoTileAtZoom(Map<String, List<String>> headers, int statusCode, byte[] content) {
if (noTileHeaders != null && headers != null) {
- for (Entry<String, String> searchEntry: noTileHeaders.entrySet()) {
+ for (Entry<String, Set<String>> searchEntry: noTileHeaders.entrySet()) {
List<String> headerVals = headers.get(searchEntry.getKey());
if (headerVals != null) {
for (String headerValue: headerVals) {
- if (headerValue.matches(searchEntry.getValue())) {
- return true;
+ for (String val: searchEntry.getValue()) {
+ if (headerValue.matches(val)) {
+ return true;
+ }
}
}
}
}
}
+ if (noTileChecksums != null) {
+ for (Entry<String, Set<String>> searchEntry: noTileChecksums.entrySet()) {
+ MessageDigest md = null;
+ try {
+ md = MessageDigest.getInstance(searchEntry.getKey());
+ } catch (NoSuchAlgorithmException e) {
+ break;
+ }
+ byte[] byteDigest = md.digest(content);
+ final int len = byteDigest.length;
+
+ char[] hexChars = new char[len * 2];
+ for (int i = 0, j = 0; i < len; i++) {
+ final int v = byteDigest[i];
+ int vn = (v & 0xf0) >> 4;
+ hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+ vn = (v & 0xf);
+ hexChars[j++] = (char) (vn + (vn >= 10 ? 'a'-10 : '0'));
+ }
+ for (String val: searchEntry.getValue()) {
+ if (new String(hexChars).equalsIgnoreCase(val)) {
+ return true;
+ }
+ }
+ }
+ }
return super.isNoTileAtZoom(headers, statusCode, content);
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
index bc704e4..98f32cc 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/BingAerialTileSource.java
@@ -36,7 +36,7 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-public class BingAerialTileSource extends AbstractTMSTileSource {
+public class BingAerialTileSource extends TMSTileSource {
private static final String API_KEY = "Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU";
private static volatile Future<List<Attribution>> attributions; // volatile is required for getAttribution(), see below.
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
index 18d01de..27b34f7 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/MapQuestOsmTileSource.java
@@ -10,7 +10,7 @@ public class MapQuestOsmTileSource extends AbstractMapQuestTileSource {
public MapQuestOsmTileSource() {
super("MapQuest-OSM", PATTERN, "mapquest-osm");
}
-
+
@Override
public String getAttributionText(int zoom, ICoordinate topLeft,
ICoordinate botRight) {
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
index 590c06d..cc112b8 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TMSTileSource.java
@@ -1,15 +1,31 @@
// License: GPL. For details, see Readme.txt file.
package org.openstreetmap.gui.jmapviewer.tilesources;
+import java.awt.Point;
+
+import org.openstreetmap.gui.jmapviewer.Coordinate;
+import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import org.openstreetmap.gui.jmapviewer.TileXY;
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+
+/**
+ * TMS tile source.
+ */
public class TMSTileSource extends AbstractTMSTileSource {
protected int maxZoom;
protected int minZoom;
+ protected OsmMercator osmMercator;
+ /**
+ * Constructs a new {@code TMSTileSource}.
+ * @param info tile source information
+ */
public TMSTileSource(TileSourceInfo info) {
super(info);
minZoom = info.getMinZoom();
maxZoom = info.getMaxZoom();
+ this.osmMercator = new OsmMercator(this.getTileSize());
}
@Override
@@ -21,4 +37,41 @@ public class TMSTileSource extends AbstractTMSTileSource {
public int getMaxZoom() {
return (maxZoom == 0) ? super.getMaxZoom() : maxZoom;
}
+
+ @Override
+ public double getDistance(double lat1, double lon1, double lat2, double lon2) {
+ return osmMercator.getDistance(lat1, lon1, lat2, lon2);
+ }
+
+ @Override
+ public Point latLonToXY(double lat, double lon, int zoom) {
+ return new Point(
+ (int) osmMercator.lonToX(lon, zoom),
+ (int) osmMercator.latToY(lat, zoom)
+ );
+ }
+
+ @Override
+ public ICoordinate xyToLatLon(int x, int y, int zoom) {
+ return new Coordinate(
+ osmMercator.yToLat(y, zoom),
+ osmMercator.xToLon(x, zoom)
+ );
+ }
+
+ @Override
+ public TileXY latLonToTileXY(double lat, double lon, int zoom) {
+ return new TileXY(
+ osmMercator.lonToX(lon, zoom) / getTileSize(),
+ osmMercator.latToY(lat, zoom) / getTileSize()
+ );
+ }
+
+ @Override
+ public ICoordinate tileXYToLatLon(int x, int y, int zoom) {
+ return new Coordinate(
+ osmMercator.yToLat(y * getTileSize(), zoom),
+ osmMercator.xToLon(x * getTileSize(), zoom)
+ );
+ }
}
diff --git a/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
index 7d2b2d1..edff7da 100644
--- a/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
+++ b/src/org/openstreetmap/gui/jmapviewer/tilesources/TileSourceInfo.java
@@ -2,8 +2,7 @@
package org.openstreetmap.gui.jmapviewer.tilesources;
import java.util.Map;
-
-import org.openstreetmap.gui.jmapviewer.OsmMercator;
+import java.util.Set;
/**
* Data class that keeps basic information about a tile source.
@@ -21,7 +20,10 @@ public class TileSourceInfo {
protected String name;
/** headers meaning, that there is no tile at this zoom level */
- protected Map<String, String> noTileHeaders;
+ protected Map<String, Set<String>> noTileHeaders;
+
+ /** checksum of empty tiles */
+ protected Map<String, Set<String>> noTileChecksums;
/** minimum zoom level supported by the tile source */
protected int minZoom;
@@ -33,7 +35,7 @@ public class TileSourceInfo {
protected String cookies = "";
/** tile size of the displayed tiles */
- private int tileSize = OsmMercator.DEFAUL_TILE_SIZE; // FIXME: set to -1 for next release
+ private int tileSize = -1;
/** mapping <header key, metadata key> */
protected Map<String, String> metadataHeaders;
@@ -95,12 +97,22 @@ public class TileSourceInfo {
/**
* Request header information for empty tiles for servers delivering such tile types
* @return map of headers, that when set, means that this is "no tile at this zoom level" situation
+ * @since 32022
*/
- public Map<String, String> getNoTileHeaders() {
+ public Map<String, Set<String>> getNoTileHeaders() {
return noTileHeaders;
}
/**
+ * Checkusm for empty tiles for servers delivering such tile types
+ * @return map of checksums, that when detected, means that this is "no tile at this zoom level" situation
+ * @since 32022
+ */
+ public Map<String, Set<String>> getNoTileChecksums() {
+ return noTileChecksums;
+ }
+
+ /**
* Request supported minimum zoom level
* @return minimum zoom level supported by tile source
*/
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/jmapviewer.git
More information about the Pkg-grass-devel
mailing list