summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java12
-rw-r--r--altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java75
-rw-r--r--altoslib/AltosMap.java11
-rw-r--r--altoslib/AltosMapInterface.java2
-rw-r--r--altoslib/AltosMapLoader.java26
-rw-r--r--altoslib/AltosMapTile.java23
-rw-r--r--altosuilib/AltosUIMapNew.java8
-rw-r--r--altosuilib/AltosUIMapPreloadNew.java8
8 files changed, 65 insertions, 100 deletions
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java
index ab142b17..e7edf3c0 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/AltosMapOffline.java
@@ -85,6 +85,8 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal
AltosMap map;
AltosDroid altos_droid;
+ static int scale = 2;
+
AltosLatLon here;
AltosLatLon there;
AltosLatLon pad;
@@ -181,14 +183,14 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal
}
}
- public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- super(cache, upper_left, center, zoom, maptype, px_size, 2);
+ public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ super(cache, upper_left, center, zoom, maptype, px_size, scale);
}
}
- public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- return new MapTile(cache, upper_left, center, zoom, maptype, px_size);
+ public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale);
}
public AltosMapPath new_path() {
@@ -492,7 +494,7 @@ public class AltosMapOffline extends View implements ScaleGestureDetector.OnScal
public void onCreateView(AltosDroid altos_droid) {
this.altos_droid = altos_droid;
- map = new AltosMap(this);
+ map = new AltosMap(this, scale);
AltosPreferences.register_map_type_listener(this);
map.set_maptype(AltosPreferences.map_type());
diff --git a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java
index 11d71280..9dfc727e 100644
--- a/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java
+++ b/altosdroid/src/org/altusmetrum/AltosDroid/PreloadMapActivity.java
@@ -49,7 +49,7 @@ import org.altusmetrum.altoslib_10.*;
* by the user, the MAC address of the device is sent back to the parent
* Activity in the result Intent.
*/
-public class PreloadMapActivity extends Activity implements AltosLaunchSiteListener, AltosMapInterface, AltosMapLoaderListener, LocationListener {
+public class PreloadMapActivity extends Activity implements AltosLaunchSiteListener, AltosMapLoaderListener, LocationListener {
private ArrayAdapter<AltosLaunchSite> known_sites_adapter;
@@ -110,7 +110,12 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe
});
}
+ public void debug(String format, Object ... arguments) {
+ AltosDebug.debug(format, arguments);
+ }
+
/* AltosLaunchSiteListener interface */
+
public void notify_launch_sites(final List<AltosLaunchSite> sites) {
this.runOnUiThread(new Runnable() {
public void run() {
@@ -120,70 +125,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe
});
}
- AltosMap map;
-
- class PreloadMapImage implements AltosImage {
- public void flush() {
- }
-
- public PreloadMapImage(File file) {
- }
- }
-
- public AltosMapPath new_path() {
- return null;
- }
-
- public AltosMapLine new_line() {
- return null;
- }
-
- public AltosImage load_image(File file) throws Exception {
- return new PreloadMapImage(file);
- }
-
- public AltosMapMark new_mark(double lat, double lon, int state) {
- return null;
- }
-
- class PreloadMapTile extends AltosMapTile {
- public void paint(AltosMapTransform t) {
- }
-
- public PreloadMapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- super(cache, upper_left, center, zoom, maptype, px_size, 2);
- }
-
- }
-
- public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- return new PreloadMapTile(cache, upper_left, center, zoom, maptype, px_size);
- }
-
- public int width() {
- return AltosMap.px_size;
- }
-
- public int height() {
- return AltosMap.px_size;
- }
-
- public void repaint() {
- }
-
- public void repaint(AltosRectangle damage) {
- }
-
- public void set_zoom_label(String label) {
- }
-
- public void select_object(AltosLatLon latlon) {
- }
-
- public void debug(String format, Object ... arguments) {
- AltosDebug.debug(format, arguments);
- }
-
/* LocationProvider interface */
AltosLaunchSite current_location_site;
@@ -281,7 +222,7 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe
AltosDebug.debug("PreloadMap load %f %f %d %d %f %d\n",
lat, lon, min, max, r, t);
- loader = new AltosMapLoader(map, this, lat, lon, min, max, r, t);
+ loader = new AltosMapLoader(this, lat, lon, min, max, r, t, AltosMapOffline.scale);
} catch (ParseException e) {
AltosDebug.debug("PreloadMap load raised exception %s", e.toString());
}
@@ -412,8 +353,6 @@ public class PreloadMapActivity extends Activity implements AltosLaunchSiteListe
known_sites_spinner.setAdapter(known_sites_adapter);
known_sites_spinner.setOnItemSelectedListener(new SiteListListener());
- map = new AltosMap(this);
-
// Listen for GPS and Network position updates
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java
index 1841277f..08ac5f3c 100644
--- a/altoslib/AltosMap.java
+++ b/altoslib/AltosMap.java
@@ -51,6 +51,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
};
AltosMapInterface map_interface;
+ int scale;
AltosMapCache cache;
@@ -328,7 +329,8 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
if (!tiles.containsKey(point)) {
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);
+ 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);
tile.add_listener(this);
tiles.put(point, tile);
}
@@ -475,11 +477,16 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
drag_stop(x, y);
}
- public AltosMap(AltosMapInterface map_interface) {
+ public AltosMap(AltosMapInterface map_interface, int scale) {
this.map_interface = map_interface;
+ this.scale = scale;
cache = new AltosMapCache(map_interface);
line = map_interface.new_line();
path = map_interface.new_path();
set_zoom_label();
}
+
+ public AltosMap(AltosMapInterface map_interface) {
+ this(map_interface, 1);
+ }
}
diff --git a/altoslib/AltosMapInterface.java b/altoslib/AltosMapInterface.java
index 756a78f2..df09224a 100644
--- a/altoslib/AltosMapInterface.java
+++ b/altoslib/AltosMapInterface.java
@@ -29,7 +29,7 @@ public interface AltosMapInterface {
public abstract AltosMapMark new_mark(double lat, double lon, int state);
- public abstract AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size);
+ public abstract AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale);
public abstract int width();
diff --git a/altoslib/AltosMapLoader.java b/altoslib/AltosMapLoader.java
index 8b856e13..015c0ad3 100644
--- a/altoslib/AltosMapLoader.java
+++ b/altoslib/AltosMapLoader.java
@@ -25,7 +25,7 @@ import java.lang.Math;
import java.net.URL;
import java.net.URLConnection;
-public class AltosMapLoader extends Thread implements AltosMapTileListener {
+public class AltosMapLoader extends Thread implements AltosMapStoreListener {
AltosMapLoaderListener listener;
double latitude, longitude;
@@ -35,6 +35,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
int all_types;
int cur_type;
double radius;
+ int scale;
int tiles_loaded_layer;
int tiles_loaded_total;
@@ -49,8 +50,6 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
boolean abort;
- AltosMap map;
-
int tile_radius(int zoom) {
double delta_lon = AltosMapTransform.lon_from_distance(latitude, radius);
@@ -80,8 +79,6 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
AltosLatLon load_centre = new AltosLatLon(latitude, longitude);
AltosMapTransform transform = new AltosMapTransform(256, 256, zoom, load_centre);
- map.centre(load_centre);
-
AltosPointInt upper_left;
AltosPointInt lower_right;
@@ -103,8 +100,9 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
AltosPointInt point = new AltosPointInt(x, y);
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 = new AltosMapTile(null, ul, center, zoom, maptype, AltosMap.px_size);
- tile.add_listener(this);
+ AltosMapStore store = AltosMapStore.get(center, zoom, maptype, AltosMap.px_size, scale);
+ listener.debug("load state %s url %s\n", AltosMapTile.status_name(store.status()), store.url);
+ store.add_listener(this);
if (abort)
return false;
}
@@ -170,14 +168,14 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
listener.loader_done(tiles_total);
}
- public synchronized void notify_tile(AltosMapTile tile, int status) {
+ public synchronized void notify_store(AltosMapStore store, int status) {
boolean do_next = false;
if (status == AltosMapTile.fetching)
return;
loading.release();
- tile.remove_listener(this);
+ store.remove_listener(this);
if (layers_loaded >= layers_total)
return;
@@ -185,7 +183,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
++tiles_loaded_total;
++tiles_loaded_layer;
- listener.debug("AltosMapLoader.notify_tile status %d total %d of %d layer %d of %d\n",
+ listener.debug("AltosMapLoader.notify_store status %d total %d of %d layer %d of %d\n",
status, tiles_loaded_total, tiles_total, tiles_loaded_layer, tiles_this_layer);
if (tiles_loaded_layer == tiles_this_layer) {
@@ -198,18 +196,17 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
listener.loader_done(tiles_total);
else
listener.loader_notify(tiles_loaded_total,
- tiles_total, tile.store.file.toString());
+ tiles_total, store.file.toString());
}
public void abort() {
this.abort = true;
}
- public AltosMapLoader(AltosMap map, AltosMapLoaderListener listener,
- double latitude, double longitude, int min_z, int max_z, double radius, int all_types) {
+ public AltosMapLoader(AltosMapLoaderListener listener,
+ double latitude, double longitude, int min_z, int max_z, double radius, int all_types, int scale) {
listener.debug("lat %f lon %f min_z %d max_z %d radius %f all_types %d\n",
latitude, longitude, min_z, max_z, radius, all_types);
- this.map = map;
this.listener = listener;
this.latitude = latitude;
this.longitude = longitude;
@@ -217,6 +214,7 @@ public class AltosMapLoader extends Thread implements AltosMapTileListener {
this.max_z = max_z;
this.radius = radius;
this.all_types = all_types;
+ this.scale = scale;
this.abort = false;
start();
}
diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java
index 19332de1..b0bac963 100644
--- a/altoslib/AltosMapTile.java
+++ b/altoslib/AltosMapTile.java
@@ -38,6 +38,25 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener {
static public final int bad_request = 4;/* downloading failed */
static public final int forbidden = 5; /* downloading failed */
+ static public String status_name(int status) {
+ switch (status) {
+ case loaded:
+ return "loaded";
+ case fetched:
+ return "fetched";
+ case fetching:
+ return "fetching";
+ case failed:
+ return "failed";
+ case bad_request:
+ return "bad_request";
+ case forbidden:
+ return "forbidden";
+ default:
+ return "unknown";
+ }
+ }
+
public void font_size_changed(int font_size) {
}
@@ -96,8 +115,4 @@ public class AltosMapTile implements AltosFontListener, AltosMapStoreListener {
store = AltosMapStore.get(center, zoom, maptype, px_size, scale);
store.add_listener(this);
}
-
- public AltosMapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- this(cache, upper_left, center, zoom, maptype, px_size, 1);
- }
}
diff --git a/altosuilib/AltosUIMapNew.java b/altosuilib/AltosUIMapNew.java
index a90e8c91..768fd058 100644
--- a/altosuilib/AltosUIMapNew.java
+++ b/altosuilib/AltosUIMapNew.java
@@ -241,8 +241,8 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
}
class MapTile extends AltosMapTile {
- public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- super(cache, upper_left, center, zoom, maptype, px_size);
+ public MapTile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ super(cache, upper_left, center, zoom, maptype, px_size, scale);
}
public void paint(AltosMapTransform t) {
@@ -332,8 +332,8 @@ public class AltosUIMapNew extends JComponent implements AltosFlightDisplay, Alt
return new MapMark(lat, lon, state);
}
- public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
- return new MapTile(cache, upper_left, center, zoom, maptype, px_size);
+ public AltosMapTile new_tile(AltosMapCache cache, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ return new MapTile(cache, upper_left, center, zoom, maptype, px_size, scale);
}
public int width() {
diff --git a/altosuilib/AltosUIMapPreloadNew.java b/altosuilib/AltosUIMapPreloadNew.java
index 3e4a604f..7cdba382 100644
--- a/altosuilib/AltosUIMapPreloadNew.java
+++ b/altosuilib/AltosUIMapPreloadNew.java
@@ -138,6 +138,7 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
JComboBox<Integer> min_zoom;
JComboBox<Integer> max_zoom;
JComboBox<Double> radius;
+ int scale = 1;
Integer[] zooms = { -12, -11, -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6 };
@@ -249,9 +250,12 @@ public class AltosUIMapPreloadNew extends AltosUIFrame implements ActionListener
else
r = r * 1000;
- loader = new AltosMapLoader(map.map, this,
+ map.map.centre(new AltosLatLon(latitude, longitude));
+
+ loader = new AltosMapLoader(this,
latitude, longitude,
- min_z, max_z, r, all_types());
+ min_z, max_z, r,
+ all_types(), scale);
} catch (ParseException pe) {
load_button.setSelected(false);