Changeset 26701 in osm for applications/viewer/jmapviewer/src
- Timestamp:
- 2011-09-24T10:29:43+02:00 (13 years ago)
- Location:
- applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer
- Files:
-
- 3 added
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/Demo.java
r25369 r26701 17 17 import javax.swing.JPanel; 18 18 19 import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent; 20 import org.openstreetmap.gui.jmapviewer.interfaces.JMapViewerEventListener; 19 21 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader; 20 22 import org.openstreetmap.gui.jmapviewer.interfaces.TileSource; … … 29 31 * 30 32 */ 31 public class Demo extends JFrame { 33 public class Demo extends JFrame implements JMapViewerEventListener { 32 34 33 35 private static final long serialVersionUID = 1L; 36 37 private JMapViewer map = null; 38 39 private JLabel zoomLabel=null; 40 private JLabel zoomValue=null; 41 42 private JLabel mperpLabelName=null; 43 private JLabel mperpLabelValue = null; 34 44 35 45 public Demo() { 36 46 super("JMapViewer Demo"); 37 47 setSize(400, 400); 38 final JMapViewer map = new JMapViewer(); 48 49 map = new JMapViewer(); 50 51 // Listen to the map viewer for user operations so components will 52 // recieve events and update 53 map.addJMVListener(this); 54 39 55 // final JMapViewer map = new JMapViewer(new MemoryTileCache(),4); 40 56 // map.setTileLoader(new OsmFileCacheTileLoader(map)); 41 57 // new DefaultMapController(map); 58 42 59 setLayout(new BorderLayout()); 43 60 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); … … 45 62 JPanel panel = new JPanel(); 46 63 JPanel helpPanel = new JPanel(); 64 65 mperpLabelName=new JLabel("Meters/Pixels: "); 66 mperpLabelValue=new JLabel(String.format("%s",map.getMeterPerPixel())); 67 68 zoomLabel=new JLabel("Zoom: "); 69 zoomValue=new JLabel(String.format("%s", map.getZoom())); 70 47 71 add(panel, BorderLayout.NORTH); 48 72 add(helpPanel, BorderLayout.SOUTH); … … 107 131 panel.add(showZoomControls); 108 132 panel.add(button); 133 134 panel.add(zoomLabel); 135 panel.add(zoomValue); 136 panel.add(mperpLabelName); 137 panel.add(mperpLabelValue); 138 109 139 add(map, BorderLayout.CENTER); 110 140 … … 130 160 } 131 161 162 private void updateZoomParameters() { 163 if (mperpLabelValue!=null) 164 mperpLabelValue.setText(String.format("%s",map.getMeterPerPixel())); 165 if (zoomValue!=null) 166 zoomValue.setText(String.format("%s", map.getZoom())); 167 } 168 169 @Override 170 public void processCommand(JMVCommandEvent command) { 171 if (command.getCommand().equals(JMVCommandEvent.COMMAND.ZOOM) || 172 command.getCommand().equals(JMVCommandEvent.COMMAND.MOVE)) { 173 updateZoomParameters(); 174 } 175 } 176 132 177 } -
applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/JMapViewer.java
r26652 r26701 26 26 import javax.swing.event.ChangeEvent; 27 27 import javax.swing.event.ChangeListener; 28 28 import javax.swing.event.EventListenerList; 29 30 import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent; 31 import org.openstreetmap.gui.jmapviewer.events.JMVCommandEvent.COMMAND; 32 import org.openstreetmap.gui.jmapviewer.interfaces.JMapViewerEventListener; 29 33 import org.openstreetmap.gui.jmapviewer.interfaces.MapMarker; 30 34 import org.openstreetmap.gui.jmapviewer.interfaces.MapPolygon; … … 37 41 38 42 /** 39 * 43 * 40 44 * Provides a simple panel that displays pre-rendered map tiles loaded from the 41 45 * OpenStreetMap project. 42 * 46 * 43 47 * @author Jan Peter Stotz 44 * 48 * 45 49 */ 46 50 public class JMapViewer extends JPanel implements TileLoaderListener { … … 118 122 tileController = new TileController(tileSource, tileCache, this); 119 123 mapMarkerList = new LinkedList<MapMarker>(); 124 mapPolygonList = new LinkedList<MapPolygon>(); 120 125 mapRectangleList = new LinkedList<MapRectangle>(); 121 mapPolygonList = new LinkedList<MapPolygon>();122 126 mapMarkersVisible = true; 123 127 mapRectanglesVisible = true; … … 188 192 * Changes the map pane so that it is centered on the specified coordinate 189 193 * at the given zoom level. 190 * 194 * 191 195 * @param lat 192 196 * latitude of the specified coordinate … … 204 208 * level is displayed on the map at the screen coordinate 205 209 * <code>mapPoint</code>. 206 * 210 * 207 211 * @param mapPoint 208 212 * point on the map denoted in pixels where the coordinate should … … 265 269 if (nbElemToCheck == 0) 266 270 return; 267 271 268 272 int x_min = Integer.MAX_VALUE; 269 273 int y_min = Integer.MAX_VALUE; … … 271 275 int y_max = Integer.MIN_VALUE; 272 276 int mapZoomMax = tileController.getTileSource().getMaxZoom(); 273 277 274 278 if (markers) { 275 279 for (MapMarker marker : mapMarkerList) { … … 282 286 } 283 287 } 284 288 285 289 if (rectangles) { 286 290 for (MapRectangle rectangle : mapRectangleList) { … … 291 295 } 292 296 } 293 297 294 298 if (polygons) { 295 299 for (MapPolygon polygon : mapPolygonList) { … … 304 308 } 305 309 } 306 310 307 311 int height = Math.max(0, getHeight()); 308 312 int width = Math.max(0, getWidth()); … … 322 326 setDisplayPosition(x, y, newZoom); 323 327 } 324 328 329 325 330 /** 326 331 * Sets the displayed map pane and zoom level so that all map markers are … … 338 343 setDisplayToFitMapElements(false, true, false); 339 344 } 340 345 341 346 /** 342 347 * Sets the displayed map pane and zoom level so that all map polygons are … … 348 353 349 354 /** 355 * @return the center 356 */ 357 public Point getCenter() { 358 return center; 359 } 360 361 /** 362 * @param center the center to set 363 */ 364 public void setCenter(Point center) { 365 this.center = center; 366 } 367 368 /** 350 369 * Calculates the latitude/longitude coordinate of the center of the 351 370 * currently displayed map area. 352 * 371 * 353 372 * @return latitude / longitude 354 373 */ … … 362 381 * Converts the relative pixel coordinate (regarding the top left corner of 363 382 * the displayed map) into a latitude / longitude coordinate 364 * 383 * 365 384 * @param mapPoint 366 385 * relative pixel coordinate regarding the top left corner of the … … 375 394 * Converts the relative pixel coordinate (regarding the top left corner of 376 395 * the displayed map) into a latitude / longitude coordinate 377 * 396 * 378 397 * @param mapPointX 379 398 * @param mapPointY … … 390 409 /** 391 410 * Calculates the position on the map of a given coordinate 392 * 411 * 393 412 * @param lat 394 413 * @param lon … … 411 430 /** 412 431 * Calculates the position on the map of a given coordinate 413 * 432 * 414 433 * @param lat 415 434 * @param lon … … 422 441 /** 423 442 * Calculates the position on the map of a given coordinate 424 * 443 * 425 444 * @param coord 426 445 * @return point on the map or <code>null</code> if the point is not visible … … 435 454 /** 436 455 * Calculates the position on the map of a given coordinate 437 * 456 * 438 457 * @param coord 439 458 * @return point on the map or <code>null</code> if the point is not visible … … 445 464 else 446 465 return null; 466 } 467 468 /** 469 * Gets the meter per pixel. 470 * 471 * @return the meter per pixel 472 * @author Jason Huntley 473 */ 474 public double getMeterPerPixel() { 475 Point origin=new Point(5,5); 476 Point center=new Point(getWidth()/2, getHeight()/2); 477 478 double pDistance=center.distance(origin); 479 480 Coordinate originCoord=getPosition(origin); 481 Coordinate centerCoord=getPosition(center); 482 483 double mDistance=OsmMercator.getDistance(originCoord.getLat(), originCoord.getLon(), 484 centerCoord.getLat(), centerCoord.getLon()); 485 486 return mDistance/pDistance; 447 487 } 448 488 … … 543 583 } 544 584 } 585 545 586 paintAttribution(g); 546 587 } … … 588 629 } 589 630 } 590 631 591 632 /** 592 633 * Moves the visible map pane. 593 * 634 * 594 635 * @param x 595 636 * horizontal movement in pixel. … … 601 642 center.y += y; 602 643 repaint(); 644 this.fireJMVEvent(new JMVCommandEvent(COMMAND.MOVE, this)); 603 645 } 604 646 … … 646 688 // requests 647 689 setDisplayPositionByLatLon(mapPoint, zoomPos.getLat(), zoomPos.getLon(), zoom); 690 691 this.fireJMVEvent(new JMVCommandEvent(COMMAND.ZOOM, this)); 648 692 } 649 693 … … 656 700 * derived implementations for adapting zoom dependent values. The new zoom 657 701 * level can be obtained via {@link #getZoom()}. 658 * 702 * 659 703 * @param oldZoom 660 704 * the previous zoom level … … 683 727 /** 684 728 * Enables or disables painting of the {@link MapMarker} 685 * 729 * 686 730 * @param mapMarkersVisible 687 731 * @see #addMapMarker(MapMarker) … … 764 808 repaint(); 765 809 } 766 810 767 811 public void setZoomContolsVisible(boolean visible) { 768 812 zoomSlider.setVisible(visible); … … 809 853 /** 810 854 * Enables or disables painting of the {@link MapRectangle} 811 * 855 * 812 856 * @param mapRectanglesVisible 813 857 * @see #addMapRectangle(MapRectangle) … … 825 869 /** 826 870 * Enables or disables painting of the {@link MapPolygon} 827 * 871 * 828 872 * @param mapPolygonsVisible 829 873 * @see #addMapPolygon(MapPolygon) … … 837 881 /* 838 882 * (non-Javadoc) 839 * 883 * 840 884 * @see 841 885 * org.openstreetmap.gui.jmapviewer.interfaces.TileLoaderListener#getTileCache … … 899 943 g.setFont(font); 900 944 } 945 946 protected EventListenerList listenerList = new EventListenerList(); 947 948 /** 949 * @param listener to set 950 */ 951 public void addJMVListener(JMapViewerEventListener listener) { 952 listenerList.add(JMapViewerEventListener.class, listener); 953 } 954 955 /** 956 * @param listener to remove 957 */ 958 public void removeJMVListener(JMapViewerEventListener listener) { 959 listenerList.remove(JMapViewerEventListener.class, listener); 960 } 961 962 /** 963 * Send an update to all objects registered with viewer 964 * 965 * @param event to dispatch 966 */ 967 void fireJMVEvent(JMVCommandEvent evt) { 968 Object[] listeners = listenerList.getListenerList(); 969 for (int i=0; i<listeners.length; i+=2) { 970 if (listeners[i]==JMapViewerEventListener.class) { 971 ((JMapViewerEventListener)listeners[i+1]).processCommand(evt); 972 } 973 } 974 } 901 975 } -
applications/viewer/jmapviewer/src/org/openstreetmap/gui/jmapviewer/OsmMercator.java
r18772 r26701 19 19 public static final double MAX_LAT = 85.05112877980659; 20 20 public static final double MIN_LAT = -85.05112877980659; 21 private static double EARTH_RADIUS = 6378137; // equatorial earth radius for EPSG:3857 (Mercator) 21 22 22 23 public static double radius(int aZoomlevel) { … … 41 42 public static int falseNorthing(int aZoomlevel) { 42 43 return (-1 * getMaxPixels(aZoomlevel) / 2); 44 } 45 46 /** 47 * Transform pixelspace to coordinates and get the distance. 48 * 49 * @param x1 the first x coordinate 50 * @param y1 the first y coordinate 51 * @param x2 the second x coordinate 52 * @param y2 the second y coordinate 53 * 54 * @param zoomLevel the zoom level 55 * @return the distance 56 * @author Jason Huntley 57 */ 58 public static double getDistance(int x1, int y1, int x2, int y2, int zoomLevel) { 59 double la1 = YToLat(y1, zoomLevel); 60 double lo1 = XToLon(x1, zoomLevel); 61 double la2 = YToLat(y2, zoomLevel); 62 double lo2 = XToLon(x2, zoomLevel); 63 64 return getDistance(la1, lo1, la2, lo2); 65 } 66 67 /** 68 * Gets the distance using Spherical law of cosines. 69 * 70 * @param la1 the Latitude in degrees 71 * @param lo1 the Longitude in degrees 72 * @param la2 the Latitude from 2nd coordinate in degrees 73 * @param lo2 the Longitude from 2nd coordinate in degrees 74 * @return the distance 75 * @author Jason Huntley 76 */ 77 public static double getDistance(double la1, double lo1, double la2, double lo2) { 78 double aStartLat = Math.toRadians(la1); 79 double aStartLong = Math.toRadians(lo1); 80 double aEndLat =Math.toRadians(la2); 81 double aEndLong = Math.toRadians(lo2); 82 83 double distance = Math.acos(Math.sin(aStartLat) * Math.sin(aEndLat) 84 + Math.cos(aStartLat) * Math.cos(aEndLat) 85 * Math.cos(aEndLong - aStartLong)); 86 87 return (EARTH_RADIUS * distance); 43 88 } 44 89
Note:
See TracChangeset
for help on using the changeset viewer.