source: josm/src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java@ 64

Last change on this file since 64 was 64, checked in by imi, 18 years ago
  • renamed track to way
  • refactored Key to be a simple String
  • fixed PropertyDialog which displayed <different> for doubled values
File size: 3.3 KB
Line 
1package org.openstreetmap.josm.gui.layer;
2
3import java.awt.Color;
4import java.awt.Graphics;
5import java.awt.Point;
6import java.beans.PropertyChangeEvent;
7import java.beans.PropertyChangeListener;
8import java.util.Collection;
9
10import javax.swing.Icon;
11
12import org.openstreetmap.josm.Main;
13import org.openstreetmap.josm.data.Bounds;
14import org.openstreetmap.josm.data.GeoPoint;
15import org.openstreetmap.josm.data.projection.Projection;
16import org.openstreetmap.josm.gui.ImageProvider;
17import org.openstreetmap.josm.gui.MapView;
18
19/**
20 * A layer holding data from a gps source.
21 * The data is read only.
22 *
23 * @author imi
24 */
25public class RawGpsDataLayer extends Layer {
26
27 private static Icon icon;
28
29 /**
30 * A list of waies which containing a list of points.
31 */
32 private final Collection<Collection<GeoPoint>> data;
33
34 public RawGpsDataLayer(Collection<Collection<GeoPoint>> data, String name) {
35 super(name);
36 this.data = data;
37 Main.pref.addPropertyChangeListener(new PropertyChangeListener(){
38 public void propertyChange(PropertyChangeEvent evt) {
39 if (Main.main.getMapFrame() == null) {
40 Main.pref.removePropertyChangeListener(this);
41 return;
42 }
43 if (evt.getPropertyName().equals("drawRawGpsLines") ||
44 evt.getPropertyName().equals("forceRawGpsLines"))
45 Main.main.getMapFrame().repaint();
46 }
47 });
48 }
49
50 /**
51 * Return a static icon.
52 */
53 @Override
54 public Icon getIcon() {
55 if (icon == null)
56 icon = ImageProvider.get("layer", "rawgps");
57 return icon;
58 }
59
60 @Override
61 public void paint(Graphics g, MapView mv) {
62 g.setColor(Color.GRAY);
63 Point old = null;
64 for (Collection<GeoPoint> c : data) {
65 if (!Main.pref.isForceRawGpsLines())
66 old = null;
67 for (GeoPoint p : c) {
68 Point screen = mv.getScreenPoint(p);
69 if (Main.pref.isDrawRawGpsLines() && old != null)
70 g.drawLine(old.x, old.y, screen.x, screen.y);
71 else
72 g.drawRect(screen.x, screen.y, 0, 0);
73 old = screen;
74 }
75 }
76 }
77
78 @Override
79 public String getToolTipText() {
80 return data.size()+" waies.";
81 }
82
83 @Override
84 public void mergeFrom(Layer from) {
85 RawGpsDataLayer layer = (RawGpsDataLayer)from;
86 data.addAll(layer.data);
87 }
88
89 @Override
90 public boolean isMergable(Layer other) {
91 return other instanceof RawGpsDataLayer;
92 }
93
94 @Override
95 public Bounds getBoundsLatLon() {
96 GeoPoint min = null;
97 GeoPoint max = null;
98 for (Collection<GeoPoint> c : data) {
99 for (GeoPoint p : c) {
100 if (min == null) {
101 min = p.clone();
102 max = p.clone();
103 } else {
104 min.lat = Math.min(min.lat, p.lat);
105 min.lon = Math.min(min.lon, p.lon);
106 max.lat = Math.max(max.lat, p.lat);
107 max.lon = Math.max(max.lon, p.lon);
108 }
109 }
110 }
111 if (min == null)
112 return null;
113 return new Bounds(min, max);
114 }
115
116 @Override
117 public Bounds getBoundsXY() {
118 GeoPoint min = null;
119 GeoPoint max = null;
120 for (Collection<GeoPoint> c : data) {
121 for (GeoPoint p : c) {
122 if (min == null) {
123 min = p.clone();
124 max = p.clone();
125 } else {
126 min.x = Math.min(min.x, p.x);
127 min.y = Math.min(min.y, p.y);
128 max.x = Math.max(max.x, p.x);
129 max.y = Math.max(max.y, p.y);
130 }
131 }
132 }
133 if (min == null)
134 return null;
135 return new Bounds(min, max);
136 }
137
138 @Override
139 public void init(Projection projection) {
140 for (Collection<GeoPoint> c : data)
141 for (GeoPoint p : c)
142 projection.latlon2xy(p);
143 }
144}
Note: See TracBrowser for help on using the repository browser.