From b83df28a4f9a22ccd71b0808aadd6360b3229221 Mon Sep 17 00:00:00 2001 From: Dmitri Pisarenko Date: Mon, 14 Oct 2013 01:00:04 +0400 Subject: [PATCH 1/3] Added classes for displaying marks of places on the glass pane. --- .gitignore | 4 ++ src/com/roots/map/MapPanel.java | 3 +- src/com/roots/map/overlay/DemoGlassPane.java | 18 +++++++++ src/com/roots/map/overlay/IGlassPane.java | 5 +++ .../ILatLongToScreenCoordinatesConverter.java | 7 ++++ src/com/roots/map/overlay/OverlayDemo.java | 32 ++++++++++++++++ .../map/overlay/PointSetMarkingGlassPane.java | 38 +++++++++++++++++++ 7 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 src/com/roots/map/overlay/DemoGlassPane.java create mode 100644 src/com/roots/map/overlay/IGlassPane.java create mode 100644 src/com/roots/map/overlay/ILatLongToScreenCoordinatesConverter.java create mode 100644 src/com/roots/map/overlay/OverlayDemo.java create mode 100644 src/com/roots/map/overlay/PointSetMarkingGlassPane.java diff --git a/.gitignore b/.gitignore index 5d55305..6e35c10 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,7 @@ bin *.jar *.war *.ear + +# IntelliJ idea files +.idea/ +*.iml \ No newline at end of file diff --git a/src/com/roots/map/MapPanel.java b/src/com/roots/map/MapPanel.java index e7d2bb8..350656b 100644 --- a/src/com/roots/map/MapPanel.java +++ b/src/com/roots/map/MapPanel.java @@ -86,6 +86,7 @@ import javax.swing.text.html.StyleSheet; import javax.xml.parsers.SAXParserFactory; +import com.roots.map.overlay.ILatLongToScreenCoordinatesConverter; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; @@ -129,7 +130,7 @@ * @author stepan.rutz * @version $Revision$ */ -public class MapPanel extends JPanel { +public class MapPanel extends JPanel implements ILatLongToScreenCoordinatesConverter { private static final Logger log = Logger.getLogger(MapPanel.class.getName()); diff --git a/src/com/roots/map/overlay/DemoGlassPane.java b/src/com/roots/map/overlay/DemoGlassPane.java new file mode 100644 index 0000000..251b7c9 --- /dev/null +++ b/src/com/roots/map/overlay/DemoGlassPane.java @@ -0,0 +1,18 @@ +package com.roots.map.overlay; + +import java.awt.*; +import java.awt.geom.Point2D; + +public class DemoGlassPane extends PointSetMarkingGlassPane { + + public static final Point2D.Double ARTYOM = new Point.Double(132.18381, 43.35514); + + public static final Point2D.Double COLOGNE = new Point.Double(50.94992, 6.96675); + + public DemoGlassPane(ILatLongToScreenCoordinatesConverter latitudeLongitudeToScreenCoordinatesConverter) { + super(latitudeLongitudeToScreenCoordinatesConverter); + + addPointToMark(ARTYOM); + addPointToMark(COLOGNE); + } +} diff --git a/src/com/roots/map/overlay/IGlassPane.java b/src/com/roots/map/overlay/IGlassPane.java new file mode 100644 index 0000000..6c26f27 --- /dev/null +++ b/src/com/roots/map/overlay/IGlassPane.java @@ -0,0 +1,5 @@ +package com.roots.map.overlay; + +public interface IGlassPane { + void repaint(); +} diff --git a/src/com/roots/map/overlay/ILatLongToScreenCoordinatesConverter.java b/src/com/roots/map/overlay/ILatLongToScreenCoordinatesConverter.java new file mode 100644 index 0000000..535a37f --- /dev/null +++ b/src/com/roots/map/overlay/ILatLongToScreenCoordinatesConverter.java @@ -0,0 +1,7 @@ +package com.roots.map.overlay; + +import java.awt.*; + +public interface ILatLongToScreenCoordinatesConverter { + Point getScreenCoordinates(Point.Double coords); +} diff --git a/src/com/roots/map/overlay/OverlayDemo.java b/src/com/roots/map/overlay/OverlayDemo.java new file mode 100644 index 0000000..d82b90d --- /dev/null +++ b/src/com/roots/map/overlay/OverlayDemo.java @@ -0,0 +1,32 @@ +package com.roots.map.overlay; + +import com.roots.map.MapPanel; + +import javax.swing.*; +import java.awt.*; + +public class OverlayDemo { + public void run() + { + final JFrame mainFrame = new JFrame("MapPanel with place marks"); + final MapPanel mapPanel = new MapPanel(new Point(3636598, 1535138), 14); + mainFrame.add(mapPanel); + + final DemoGlassPane glassPane = new DemoGlassPane(mapPanel); + + mainFrame.setGlassPane(glassPane); + + mainFrame.getGlassPane().setVisible(true); + + mainFrame.pack(); + mainFrame.setVisible(true); + + } + + public static void main(final String[] aArgs) + { + final OverlayDemo app = new OverlayDemo(); + + app.run(); + } +} diff --git a/src/com/roots/map/overlay/PointSetMarkingGlassPane.java b/src/com/roots/map/overlay/PointSetMarkingGlassPane.java new file mode 100644 index 0000000..c97e281 --- /dev/null +++ b/src/com/roots/map/overlay/PointSetMarkingGlassPane.java @@ -0,0 +1,38 @@ +package com.roots.map.overlay; + +import javax.swing.*; +import java.awt.*; +import java.util.*; +import java.util.List; + +public class PointSetMarkingGlassPane extends JComponent implements IGlassPane { + private final ILatLongToScreenCoordinatesConverter latLongToScreenCoordinatesConverter; + private final List pointsToMark = new LinkedList(); + + public PointSetMarkingGlassPane(final ILatLongToScreenCoordinatesConverter aConverter) { + this.latLongToScreenCoordinatesConverter = aConverter; + } + + protected void addPointToMark(final Point.Double aPoint) + { + if (aPoint != null) + { + pointsToMark.add(aPoint); + } + } + + @Override + protected void paintComponent(final Graphics aGraphics) { + for (final Point.Double pointToMark : pointsToMark) + { + final Point positionInScreenCoords = latLongToScreenCoordinatesConverter.getScreenCoordinates(pointToMark); + drawCircle(aGraphics, positionInScreenCoords, Color.red); + } + } + + private void drawCircle(Graphics g, Point point, Color color) { + g.setColor(color); + g.fillOval(point.x, point.y, 10, 10); + } + +} From ec304e1ac0959df0d4bdb94760de79a7fc6631b7 Mon Sep 17 00:00:00 2001 From: Dmitri Pisarenko Date: Mon, 14 Oct 2013 01:09:57 +0400 Subject: [PATCH 2/3] Corrected the coordinates of Cologne. --- src/com/roots/map/overlay/DemoGlassPane.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/roots/map/overlay/DemoGlassPane.java b/src/com/roots/map/overlay/DemoGlassPane.java index 251b7c9..5efc759 100644 --- a/src/com/roots/map/overlay/DemoGlassPane.java +++ b/src/com/roots/map/overlay/DemoGlassPane.java @@ -7,7 +7,7 @@ public class DemoGlassPane extends PointSetMarkingGlassPane { public static final Point2D.Double ARTYOM = new Point.Double(132.18381, 43.35514); - public static final Point2D.Double COLOGNE = new Point.Double(50.94992, 6.96675); + public static final Point2D.Double COLOGNE = new Point.Double(6.96202, 50.93575); public DemoGlassPane(ILatLongToScreenCoordinatesConverter latitudeLongitudeToScreenCoordinatesConverter) { super(latitudeLongitudeToScreenCoordinatesConverter); From d54cdfd0066d3a86fc59d27e360e9a0d894ff420 Mon Sep 17 00:00:00 2001 From: Dmitri Pisarenko Date: Mon, 14 Oct 2013 01:15:35 +0400 Subject: [PATCH 3/3] Update README.md Added a description of how to mark places. --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index b179a2b..7d10ffe 100644 --- a/README.md +++ b/README.md @@ -2,3 +2,10 @@ mappanel ======== MapPanel renders OpenstreetMaps using just basic java. Rendering is done from a tileserver and uses some multithreaded tile loading, caching and zooming. Free for everyone to build his own stuff on. + +Marking places on the map +========================= +The class `com.roots.map.overlay.OverlayDemo` demonstrates how to mark places, identiefied by latitude and +longitude on the map. + +`com.roots.map.overlay.DemoGlassPane` is setup to display marks at two cities - Artyom, Russia and Cologne, Germany.