X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=altoslib%2FAltosMap.java;h=8fc40e8af307057a269e2552271ed09f0a47d060;hb=8554da3b6c05c1094045f4fb21b43c183029408f;hp=e3c4a6a79ec54db6223c62fd4690899a74855d14;hpb=1085ec5d57e0ed5d132f2bbdac1a0b6a32c0ab4a;p=fw%2Faltos diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java index e3c4a6a7..8fc40e8a 100644 --- a/altoslib/AltosMap.java +++ b/altoslib/AltosMap.java @@ -16,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_11; +package org.altusmetrum.altoslib_13; import java.io.*; import java.lang.*; @@ -211,20 +211,21 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { } public boolean set_maptype(int maptype) { +/* if (maptype != this.maptype) { this.maptype = maptype; tiles.clear(); repaint(); return true; } +*/ return false; } - public void show(AltosState state, AltosListenerState listener_state) { - - /* If insufficient gps data, nothing to update + public void show(AltosGPS gps, double time, int state, double gps_height) { + /* + * If insufficient gps data, nothing to update */ - AltosGPS gps = state.gps; if (gps == null) return; @@ -232,23 +233,23 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { if (!gps.locked && gps.nsat < 4) return; - switch (state.state()) { + switch (state) { case AltosLib.ao_flight_boost: if (!have_boost) { - add_mark(gps.lat, gps.lon, state.state()); + add_mark(gps.lat, gps.lon, state); have_boost = true; } break; case AltosLib.ao_flight_landed: if (!have_landed) { - add_mark(gps.lat, gps.lon, state.state()); + add_mark(gps.lat, gps.lon, state); have_landed = true; } break; } if (path != null) { - AltosMapRectangle damage = path.add(gps.lat, gps.lon, state.state()); + AltosMapRectangle damage = path.add(gps, time, state, gps_height); if (damage != null) repaint(damage, AltosMapPath.stroke_width); @@ -259,6 +260,10 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { maybe_centre(gps.lat, gps.lon); } + public void show(AltosState state, AltosListenerState listener_state) { + show(state.gps, state.time, state.state(), state.gps_height()); + } + public void centre(AltosLatLon lat_lon) { centre = lat_lon; set_transform(); @@ -268,10 +273,14 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { centre(new AltosLatLon(lat, lon)); } - public void centre(AltosState state) { - if (!state.gps.locked && state.gps.nsat < 4) + public void centre(AltosGPS gps) { + if (!gps.locked && gps.nsat < 4) return; - centre(state.gps.lat, state.gps.lon); + centre(gps.lat, gps.lon); + } + + public void centre(AltosState state) { + centre(state.gps); } public void maybe_centre(double lat, double lon) { @@ -280,13 +289,19 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { centre(lat_lon); } - public void add_mark(double lat, double lon, int state) { + public AltosMapMark add_mark(double lat, double lon, int state) { + AltosMapMark mark; synchronized(marks) { - AltosMapMark mark = map_interface.new_mark(lat, lon, state); + mark = map_interface.new_mark(lat, lon, state); if (mark != null) marks.add(mark); } repaint(); + return mark; + } + + public void del_mark(AltosMapMark mark) { + marks.remove(mark); } public void clear_marks() { @@ -331,7 +346,9 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { AltosLatLon ul = transform.lat_lon(point); AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2)); AltosMapTile tile = map_interface.new_tile(cache, ul, center, zoom, maptype, px_size, scale); - debug("show state %s url %s\n", AltosMapTile.status_name(tile.store.status()), tile.store.url); + int status = tile.store.status(); + if (status == AltosMapTile.fetching) + debug("Fetching %.6f %.6f %d\n", center.lat, center.lon, zoom); tile.add_listener(this); tiles.put(point, tile); } @@ -342,7 +359,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { public void set_load_params(int new_zoom, int new_type, double lat, double lon, int radius, AltosMapTileListener listener) { if (AltosMap.min_zoom <= new_zoom && new_zoom <= AltosMap.max_zoom) zoom = new_zoom; - maptype = new_type; +/* maptype = new_type; */ load_centre = new AltosLatLon(lat, lon); load_radius = radius; load_listener = listener; @@ -478,6 +495,16 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener { drag_stop(x, y); } + public AltosMapPathPoint nearest(int x, int y) { + notice_user_input(); + if (path == null) + return null; + if (transform == null) + return null; + AltosLatLon at = transform.screen_lat_lon(new AltosPointInt(x, y)); + return path.nearest(at); + } + public AltosMap(AltosMapInterface map_interface, int scale) { this.map_interface = map_interface; this.scale = scale;