001    package org.openstreetmap.gui.jmapviewer;
002    
003    //License: GPL. Copyright 2008 by Jan Peter Stotz
004    
005    import java.awt.BorderLayout;
006    import java.awt.event.ActionEvent;
007    import java.awt.event.ActionListener;
008    import java.awt.event.ItemEvent;
009    import java.awt.event.ItemListener;
010    import java.io.IOException;
011    
012    import javax.swing.JButton;
013    import javax.swing.JCheckBox;
014    import javax.swing.JComboBox;
015    import javax.swing.JFrame;
016    import javax.swing.JLabel;
017    import javax.swing.JPanel;
018    
019    import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent;
020    import org.openstreetmap.gui.jmapviewer.interfaces.JMapViewerEventListener;
021    import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
022    import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
023    import org.openstreetmap.gui.jmapviewer.tilesources.BingAerialTileSource;
024    import org.openstreetmap.gui.jmapviewer.tilesources.MapQuestOpenAerialTileSource;
025    import org.openstreetmap.gui.jmapviewer.tilesources.MapQuestOsmTileSource;
026    import org.openstreetmap.gui.jmapviewer.tilesources.OsmTileSource;
027    
028    /**
029     *
030     * Demonstrates the usage of {@link JMapViewer}
031     *
032     * @author Jan Peter Stotz
033     *
034     */
035    public class Demo extends JFrame implements JMapViewerEventListener  {
036    
037        private static final long serialVersionUID = 1L;
038    
039        private JMapViewer map = null;
040    
041        private JLabel zoomLabel=null;
042        private JLabel zoomValue=null;
043    
044        private JLabel mperpLabelName=null;
045        private JLabel mperpLabelValue = null;
046    
047        public Demo() {
048            super("JMapViewer Demo");
049            setSize(400, 400);
050    
051            map = new JMapViewer();
052    
053            // Listen to the map viewer for user operations so components will
054            // recieve events and update
055            map.addJMVListener(this);
056    
057            // final JMapViewer map = new JMapViewer(new MemoryTileCache(),4);
058            // map.setTileLoader(new OsmFileCacheTileLoader(map));
059            // new DefaultMapController(map);
060    
061            setLayout(new BorderLayout());
062            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
063            setExtendedState(JFrame.MAXIMIZED_BOTH);
064            JPanel panel = new JPanel();
065            JPanel helpPanel = new JPanel();
066    
067            mperpLabelName=new JLabel("Meters/Pixels: ");
068            mperpLabelValue=new JLabel(String.format("%s",map.getMeterPerPixel()));
069    
070            zoomLabel=new JLabel("Zoom: ");
071            zoomValue=new JLabel(String.format("%s", map.getZoom()));
072    
073            add(panel, BorderLayout.NORTH);
074            add(helpPanel, BorderLayout.SOUTH);
075            JLabel helpLabel = new JLabel("Use right mouse button to move,\n "
076                    + "left double click or mouse wheel to zoom.");
077            helpPanel.add(helpLabel);
078            JButton button = new JButton("setDisplayToFitMapMarkers");
079            button.addActionListener(new ActionListener() {
080    
081                public void actionPerformed(ActionEvent e) {
082                    map.setDisplayToFitMapMarkers();
083                }
084            });
085            JComboBox tileSourceSelector = new JComboBox(new TileSource[] { new OsmTileSource.Mapnik(),
086                    new OsmTileSource.CycleMap(), new BingAerialTileSource(), new MapQuestOsmTileSource(), new MapQuestOpenAerialTileSource() });
087            tileSourceSelector.addItemListener(new ItemListener() {
088                public void itemStateChanged(ItemEvent e) {
089                    map.setTileSource((TileSource) e.getItem());
090                }
091            });
092            JComboBox tileLoaderSelector;
093            try {
094                tileLoaderSelector = new JComboBox(new TileLoader[] { new OsmFileCacheTileLoader(map),
095                        new OsmTileLoader(map) });
096            } catch (IOException e) {
097                tileLoaderSelector = new JComboBox(new TileLoader[] { new OsmTileLoader(map) });
098            }
099            tileLoaderSelector.addItemListener(new ItemListener() {
100                public void itemStateChanged(ItemEvent e) {
101                    map.setTileLoader((TileLoader) e.getItem());
102                }
103            });
104            map.setTileLoader((TileLoader) tileLoaderSelector.getSelectedItem());
105            panel.add(tileSourceSelector);
106            panel.add(tileLoaderSelector);
107            final JCheckBox showMapMarker = new JCheckBox("Map markers visible");
108            showMapMarker.setSelected(map.getMapMarkersVisible());
109            showMapMarker.addActionListener(new ActionListener() {
110    
111                public void actionPerformed(ActionEvent e) {
112                    map.setMapMarkerVisible(showMapMarker.isSelected());
113                }
114            });
115            panel.add(showMapMarker);
116            final JCheckBox showTileGrid = new JCheckBox("Tile grid visible");
117            showTileGrid.setSelected(map.isTileGridVisible());
118            showTileGrid.addActionListener(new ActionListener() {
119    
120                public void actionPerformed(ActionEvent e) {
121                    map.setTileGridVisible(showTileGrid.isSelected());
122                }
123            });
124            panel.add(showTileGrid);
125            final JCheckBox showZoomControls = new JCheckBox("Show zoom controls");
126            showZoomControls.setSelected(map.getZoomContolsVisible());
127            showZoomControls.addActionListener(new ActionListener() {
128    
129                public void actionPerformed(ActionEvent e) {
130                    map.setZoomContolsVisible(showZoomControls.isSelected());
131                }
132            });
133            panel.add(showZoomControls);
134            panel.add(button);
135    
136            panel.add(zoomLabel);
137            panel.add(zoomValue);
138            panel.add(mperpLabelName);
139            panel.add(mperpLabelValue);
140    
141            add(map, BorderLayout.CENTER);
142    
143            //
144            map.addMapMarker(new MapMarkerDot(49.814284999, 8.642065999));
145            map.addMapMarker(new MapMarkerDot(49.91, 8.24));
146            map.addMapMarker(new MapMarkerDot(49.71, 8.64));
147            map.addMapMarker(new MapMarkerDot(48.71, -1));
148            map.addMapMarker(new MapMarkerDot(49.8588, 8.643));
149    
150            // map.setDisplayPositionByLatLon(49.807, 8.6, 11);
151            // map.setTileGridVisible(true);
152        }
153    
154        /**
155         * @param args
156         */
157        public static void main(String[] args) {
158            // java.util.Properties systemProperties = System.getProperties();
159            // systemProperties.setProperty("http.proxyHost", "localhost");
160            // systemProperties.setProperty("http.proxyPort", "8008");
161            new Demo().setVisible(true);
162        }
163    
164        private void updateZoomParameters() {
165            if (mperpLabelValue!=null)
166                mperpLabelValue.setText(String.format("%s",map.getMeterPerPixel()));
167            if (zoomValue!=null)
168                zoomValue.setText(String.format("%s", map.getZoom()));
169        }
170    
171        @Override
172        public void processCommand(JMVCommandEvent command) {
173            if (command.getCommand().equals(JMVCommandEvent.COMMAND.ZOOM) ||
174                    command.getCommand().equals(JMVCommandEvent.COMMAND.MOVE)) {
175                updateZoomParameters();
176            }
177        }
178    
179    }