/**
* OSM2ShareNav
*
*
* @version $Revision$ ($Name$)
*
* Copyright (C) 2007 Harald Mueller
*/
package net.sharenav.osm.fBrowser;
//License: GPL. Copyright 2008 by Jan Peter Stotz
import java.awt.BorderLayout;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.openstreetmap.gui.jmapviewer.DefaultMapController;
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import org.openstreetmap.gui.jmapviewer.MapMarkerDot;
import org.openstreetmap.gui.jmapviewer.OsmFileCacheTileLoader;
import org.openstreetmap.gui.jmapviewer.OsmMercator;
import org.openstreetmap.gui.jmapviewer.OsmTileLoader;
import org.openstreetmap.gui.jmapviewer.OsmTileSource;
import org.openstreetmap.gui.jmapviewer.interfaces.MapRectangle;
import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
/**
*
* Demonstrates the usage of {@link JMapViewer}
*
* @author Jan Peter Stotz
*
*/
public class MapFrame extends JInternalFrame {
private static final long serialVersionUID = 1L;
final JMapViewer map = new JMapViewer();
// private MapMarkerRectangle marker;
private Tile viewTile;
private BWay way;
public MapFrame() {
super("JMapViewer Demo",true, //resizable
true, //closable
true, //maximizable
true);//iconifiable
setSize(400, 400);
// final JMapViewer map = new JMapViewer(new MemoryTileCache(),4);
// map.setTileLoader(new OsmFileCacheTileLoader(map));
new DefaultMapController(map);
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// setExtendedState(JFrame.MAXIMIZED_BOTH);
JPanel panel = new JPanel();
JPanel helpPanel = new JPanel();
add(panel, BorderLayout.NORTH);
add(helpPanel, BorderLayout.SOUTH);
JLabel helpLabel =
new JLabel("Use right mouse button to move,\n "
+ "left double click or mouse wheel to zoom.");
helpPanel.add(helpLabel);
JButton button = new JButton("setDisplayToFitMapMarkers");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setDisplayToFitMapMarkers();
}
});
JComboBox tileSourceSelector =
new JComboBox(new TileSource[] { new OsmTileSource.Mapnik(),
new OsmTileSource.TilesAtHome(), new OsmTileSource.CycleMap() });
tileSourceSelector.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
map.setTileSource((TileSource) e.getItem());
}
});
JComboBox tileLoaderSelector =
new JComboBox(new TileLoader[] { new OsmFileCacheTileLoader(map),
new OsmTileLoader(map) });
tileLoaderSelector.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
map.setTileLoader((TileLoader) e.getItem());
}
});
map.setTileLoader((TileLoader) tileLoaderSelector.getSelectedItem());
panel.add(tileSourceSelector);
panel.add(tileLoaderSelector);
final JCheckBox showMapMarker = new JCheckBox("Map markers visible");
showMapMarker.setSelected(map.getMapMarkersVisible());
showMapMarker.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setMapMarkerVisible(showMapMarker.isSelected());
}
});
panel.add(showMapMarker);
final JCheckBox showTileGrid = new JCheckBox("Tile grid visible");
showTileGrid.setSelected(map.isTileGridVisible());
showTileGrid.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setTileGridVisible(showTileGrid.isSelected());
}
});
panel.add(showTileGrid);
final JCheckBox showZoomControls = new JCheckBox("Show zoom controls");
showZoomControls.setSelected(map.getZoomContolsVisible());
showZoomControls.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setZoomContolsVisible(showZoomControls.isSelected());
}
});
panel.add(showZoomControls);
panel.add(button);
add(map, BorderLayout.CENTER);
// map.setDisplayPositionByLatLon(49.807, 8.6, 11);
// map.setTileGridVisible(true);
}
/**
* @param tile
*/
public synchronized void setSelected(Tile tile) {
try {
// setMapView(tile);
map.setIgnoreRepaint(true);
if (tile instanceof SingleTile){
((SingleTile) tile).setSelected(null);
}
// System.out.println("setMarker " + tile);
double f=180d/Math.PI;
map.setMapRectangleList(new ArrayList<MapRectangle>());
map.addMapRectangle(tile);
setIgnoreRepaint(false);
} catch (Exception e) {
System.err.println("pro while setSel");
e.printStackTrace();
}
}
/**
* @param sel
*/
public void setSelected(BWay sel) {
this.way = sel;
sel.getTile().setSelected(sel);
map.addMapRectangle(sel.getTile());
System.out.println("set selected Way");
}
void setMapView(Tile tile){
double f=180d/Math.PI;
int mapZoomMax = JMapViewer.MAX_ZOOM;
int newZoom = mapZoomMax;
int x_min=OsmMercator.LonToX(tile.minLon*f, mapZoomMax);
int y_min=OsmMercator.LatToY(tile.maxLat*f, mapZoomMax);
int x_max=OsmMercator.LonToX(tile.maxLon*f, mapZoomMax);
int y_max=OsmMercator.LatToY(tile.minLat*f, mapZoomMax);
int height = Math.max(0, map.getHeight());
int width = Math.max(0, map.getWidth());
int x = x_max - x_min;
int y = y_max - y_min;
while (x > width || y > height) {
// System.out.println("zoom: " + zoom + " -> " + x + " " + y);
newZoom--;
x >>= 1;
y >>= 1;
}
x = x_min + (x_max - x_min) / 2;
y = y_min + (y_max - y_min) / 2;
int z = 1 << (mapZoomMax - newZoom);
x /= z;
y /= z;
map.setDisplayPosition(x, y, newZoom);
}
public Point getMapPosition(double lat, double lon, boolean checkOutside) {
return map.getMapPosition(lat,lon, checkOutside);
}
}