001package org.openstreetmap.gui.jmapviewer; 002 003//License: GPL. Copyright 2008 by Jan Peter Stotz 004 005import java.awt.BorderLayout; 006import java.awt.Cursor; 007import java.awt.Point; 008import java.awt.event.ActionEvent; 009import java.awt.event.ActionListener; 010import java.awt.event.ItemEvent; 011import java.awt.event.ItemListener; 012import java.awt.event.MouseAdapter; 013import java.awt.event.MouseEvent; 014import java.io.IOException; 015 016import javax.swing.JButton; 017import javax.swing.JCheckBox; 018import javax.swing.JComboBox; 019import javax.swing.JFrame; 020import javax.swing.JLabel; 021import javax.swing.JPanel; 022 023import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent; 024import org.openstreetmap.gui.jmapviewer.interfaces.JMapViewerEventListener; 025import org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon; 026import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader; 027import org.openstreetmap.gui.jmapviewer.interfaces.TileSource; 028import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource; 029import org.openstreetmap.gui.jmapviewer.tilesources.MapQuestOpenAerialTileSource; 030import org.openstreetmap.gui.jmapviewer.tilesources.MapQuestOsmTileSource; 031import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource; 032 033/** 034 * 035 * Demonstrates the usage of {@link JMapViewer} 036 * 037 * @author Jan Peter Stotz 038 * 039 */ 040public class Demo extends JFrame implements JMapViewerEventListener { 041 042 private static final long serialVersionUID = 1L; 043 044 private JMapViewerTree treeMap = null; 045 046 private JLabel zoomLabel=null; 047 private JLabel zoomValue=null; 048 049 private JLabel mperpLabelName=null; 050 private JLabel mperpLabelValue = null; 051 052 /** 053 * Constructs the {@code Demo}. 054 */ 055 public Demo() { 056 super("JMapViewer Demo"); 057 setSize(400, 400); 058 059 treeMap = new JMapViewerTree("Zones"); 060 061 // Listen to the map viewer for user operations so components will 062 // recieve events and update 063 map().addJMVListener(this); 064 065 // final JMapViewer map = new JMapViewer(new MemoryTileCache(),4); 066 // map.setTileLoader(new OsmFileCacheTileLoader(map)); 067 // new DefaultMapController(map); 068 069 setLayout(new BorderLayout()); 070 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 071 setExtendedState(JFrame.MAXIMIZED_BOTH); 072 JPanel panel = new JPanel(); 073 JPanel panelTop = new JPanel(); 074 JPanel panelBottom = new JPanel(); 075 JPanel helpPanel = new JPanel(); 076 077 mperpLabelName=new JLabel("Meters/Pixels: "); 078 mperpLabelValue=new JLabel(String.format("%s",map().getMeterPerPixel())); 079 080 zoomLabel=new JLabel("Zoom: "); 081 zoomValue=new JLabel(String.format("%s", map().getZoom())); 082 083 add(panel, BorderLayout.NORTH); 084 add(helpPanel, BorderLayout.SOUTH); 085 panel.setLayout(new BorderLayout()); 086 panel.add(panelTop, BorderLayout.NORTH); 087 panel.add(panelBottom, BorderLayout.SOUTH); 088 JLabel helpLabel = new JLabel("Use right mouse button to move,\n " 089 + "left double click or mouse wheel to zoom."); 090 helpPanel.add(helpLabel); 091 JButton button = new JButton("setDisplayToFitMapMarkers"); 092 button.addActionListener(new ActionListener() { 093 094 public void actionPerformed(ActionEvent e) { 095 map().setDisplayToFitMapMarkers(); 096 } 097 }); 098 JComboBox tileSourceSelector = new JComboBox(new TileSource[] { new OsmTileSource.Mapnik(), 099 new OsmTileSource.CycleMap(), new BingAerialTileSource(), new MapQuestOsmTileSource(), new MapQuestOpenAerialTileSource() }); 100 tileSourceSelector.addItemListener(new ItemListener() { 101 public void itemStateChanged(ItemEvent e) { 102 map().setTileSource((TileSource) e.getItem()); 103 } 104 }); 105 JComboBox tileLoaderSelector; 106 try { 107 tileLoaderSelector = new JComboBox(new TileLoader[] { new OsmFileCacheTileLoader(map()), 108 new OsmTileLoader(map()) }); 109 } catch (IOException e) { 110 tileLoaderSelector = new JComboBox(new TileLoader[] { new OsmTileLoader(map()) }); 111 } 112 tileLoaderSelector.addItemListener(new ItemListener() { 113 public void itemStateChanged(ItemEvent e) { 114 map().setTileLoader((TileLoader) e.getItem()); 115 } 116 }); 117 map().setTileLoader((TileLoader) tileLoaderSelector.getSelectedItem()); 118 panelTop.add(tileSourceSelector); 119 panelTop.add(tileLoaderSelector); 120 final JCheckBox showMapMarker = new JCheckBox("Map markers visible"); 121 showMapMarker.setSelected(map().getMapMarkersVisible()); 122 showMapMarker.addActionListener(new ActionListener() { 123 public void actionPerformed(ActionEvent e) { 124 map().setMapMarkerVisible(showMapMarker.isSelected()); 125 } 126 }); 127 panelBottom.add(showMapMarker); 128 /// 129 final JCheckBox showTreeLayers = new JCheckBox("Tree Layers visible"); 130 showTreeLayers.addActionListener(new ActionListener() { 131 public void actionPerformed(ActionEvent e) { 132 treeMap.setTreeVisible(showTreeLayers.isSelected()); 133 } 134 }); 135 panelBottom.add(showTreeLayers); 136 /// 137 final JCheckBox showToolTip = new JCheckBox("ToolTip visible"); 138 showToolTip.addActionListener(new ActionListener() { 139 public void actionPerformed(ActionEvent e) { 140 map().setToolTipText(null); 141 } 142 }); 143 panelBottom.add(showToolTip); 144 /// 145 final JCheckBox showTileGrid = new JCheckBox("Tile grid visible"); 146 showTileGrid.setSelected(map().isTileGridVisible()); 147 showTileGrid.addActionListener(new ActionListener() { 148 public void actionPerformed(ActionEvent e) { 149 map().setTileGridVisible(showTileGrid.isSelected()); 150 } 151 }); 152 panelBottom.add(showTileGrid); 153 final JCheckBox showZoomControls = new JCheckBox("Show zoom controls"); 154 showZoomControls.setSelected(map().getZoomContolsVisible()); 155 showZoomControls.addActionListener(new ActionListener() { 156 public void actionPerformed(ActionEvent e) { 157 map().setZoomContolsVisible(showZoomControls.isSelected()); 158 } 159 }); 160 panelBottom.add(showZoomControls); 161 final JCheckBox scrollWrapEnabled = new JCheckBox("Scrollwrap enabled"); 162 scrollWrapEnabled.addActionListener(new ActionListener() { 163 public void actionPerformed(ActionEvent e) { 164 map().setScrollWrapEnabled(scrollWrapEnabled.isSelected()); 165 } 166 }); 167 panelBottom.add(scrollWrapEnabled); 168 panelBottom.add(button); 169 170 panelTop.add(zoomLabel); 171 panelTop.add(zoomValue); 172 panelTop.add(mperpLabelName); 173 panelTop.add(mperpLabelValue); 174 175 add(treeMap, BorderLayout.CENTER); 176 177 // 178 LayerGroup germanyGroup = new LayerGroup("Germany"); 179 Layer germanyWestLayer = germanyGroup.addLayer("Germany West"); 180 Layer germanyEastLayer = germanyGroup.addLayer("Germany East"); 181 MapMarkerDot eberstadt = new MapMarkerDot(germanyEastLayer, "Eberstadt", 49.814284999, 8.642065999); 182 MapMarkerDot ebersheim = new MapMarkerDot(germanyWestLayer, "Ebersheim", 49.91, 8.24); 183 MapMarkerDot empty = new MapMarkerDot(germanyEastLayer, 49.71, 8.64); 184 MapMarkerDot darmstadt = new MapMarkerDot(germanyEastLayer, "Darmstadt", 49.8588, 8.643); 185 map().addMapMarker(eberstadt); 186 map().addMapMarker(ebersheim); 187 map().addMapMarker(empty); 188 Layer franceLayer = treeMap.addLayer("France"); 189 map().addMapMarker(new MapMarkerDot(franceLayer, "La Gallerie", 48.71, -1)); 190 map().addMapMarker(new MapMarkerDot(43.604, 1.444)); 191 map().addMapMarker(new MapMarkerCircle(53.343, -6.267, 0.666)); 192 map().addMapRectangle(new MapRectangleImpl(new Coordinate(53.343, -6.267), new Coordinate(43.604, 1.444))); 193 map().addMapMarker(darmstadt); 194 treeMap.addLayer(germanyWestLayer); 195 treeMap.addLayer(germanyEastLayer); 196 197 MapPolygon bermudas = new MapPolygonImpl(c(49,1), c(45,10), c(40,5)); 198 map().addMapPolygon( bermudas ); 199 map().addMapPolygon( new MapPolygonImpl(germanyEastLayer, "Riedstadt", ebersheim, darmstadt, eberstadt, empty)); 200 201 map().addMapMarker(new MapMarkerCircle(germanyWestLayer, "North of Suisse", new Coordinate(48, 7), .5)); 202 Layer spain = treeMap.addLayer("Spain"); 203 map().addMapMarker(new MapMarkerCircle(spain, "La Garena", new Coordinate(40.4838, -3.39), .002)); 204 spain.setVisible(false); 205 206 Layer wales = treeMap.addLayer("UK"); 207 map().addMapRectangle(new MapRectangleImpl(wales, "Wales", c(53.35,-4.57), c(51.64,-2.63))); 208 209 // map.setDisplayPositionByLatLon(49.807, 8.6, 11); 210 // map.setTileGridVisible(true); 211 212 map().addMouseListener(new MouseAdapter() { 213 @Override 214 public void mouseClicked(MouseEvent e) { 215 if (e.getButton() == MouseEvent.BUTTON1) { 216 map().getAttribution().handleAttribution(e.getPoint(), true); 217 } 218 } 219 }); 220 221 map().addMouseMotionListener(new MouseAdapter() { 222 @Override 223 public void mouseMoved(MouseEvent e) { 224 Point p = e.getPoint(); 225 boolean cursorHand = map().getAttribution().handleAttributionCursor(p); 226 if (cursorHand) { 227 map().setCursor(new Cursor(Cursor.HAND_CURSOR)); 228 } else { 229 map().setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); 230 } 231 if(showToolTip.isSelected()) map().setToolTipText(map().getPosition(p).toString()); 232 } 233 }); 234 } 235 private JMapViewer map(){ 236 return treeMap.getViewer(); 237 } 238 private static Coordinate c(double lat, double lon){ 239 return new Coordinate(lat, lon); 240 } 241 242 /** 243 * @param args 244 */ 245 public static void main(String[] args) { 246 // java.util.Properties systemProperties = System.getProperties(); 247 // systemProperties.setProperty("http.proxyHost", "localhost"); 248 // systemProperties.setProperty("http.proxyPort", "8008"); 249 new Demo().setVisible(true); 250 } 251 252 private void updateZoomParameters() { 253 if (mperpLabelValue!=null) 254 mperpLabelValue.setText(String.format("%s",map().getMeterPerPixel())); 255 if (zoomValue!=null) 256 zoomValue.setText(String.format("%s", map().getZoom())); 257 } 258 259 @Override 260 public void processCommand(JMVCommandEvent command) { 261 if (command.getCommand().equals(JMVCommandEvent.COMMAND.ZOOM) || 262 command.getCommand().equals(JMVCommandEvent.COMMAND.MOVE)) { 263 updateZoomParameters(); 264 } 265 } 266 267}