summaryrefslogtreecommitdiff
path: root/altoslib
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2015-05-26 19:47:04 -0700
committerKeith Packard <keithp@keithp.com>2015-05-26 19:47:04 -0700
commit7975d088a4ac44c0943134fa41d0e3b88f50b98f (patch)
treea4213f36420604ee6ff11ff348d53cc28d81ec07 /altoslib
parentf822b84d8c25159ff113fef6a419b6e18e87a87a (diff)
altosdroid: Add offline map tab
It's not very fancy yet, but it does zoom and pan, and show the path of the rocket with a line. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib')
-rw-r--r--altoslib/AltosMap.java2
-rw-r--r--altoslib/AltosMapTile.java25
-rw-r--r--altoslib/AltosPointInt.java10
3 files changed, 29 insertions, 8 deletions
diff --git a/altoslib/AltosMap.java b/altoslib/AltosMap.java
index b54c66cf..bdb60f0c 100644
--- a/altoslib/AltosMap.java
+++ b/altoslib/AltosMap.java
@@ -287,7 +287,7 @@ public class AltosMap implements AltosMapTileListener, AltosMapStoreListener {
AltosLatLon ul = transform.lat_lon(new AltosPointDouble(x, y));
AltosLatLon center = transform.lat_lon(new AltosPointDouble(x + AltosMap.px_size/2, y + AltosMap.px_size/2));
AltosMapTile tile = map_interface.new_tile(this, ul, center, zoom, maptype,
- AltosMap.px_size);
+ px_size);
tiles.put(point, tile);
}
}
diff --git a/altoslib/AltosMapTile.java b/altoslib/AltosMapTile.java
index 165f9e6f..ee9206ee 100644
--- a/altoslib/AltosMapTile.java
+++ b/altoslib/AltosMapTile.java
@@ -26,6 +26,7 @@ public abstract class AltosMapTile implements AltosFontListener {
public int px_size;
int zoom;
int maptype;
+ int scale;
public AltosMapStore store;
public AltosMapCache cache;
public int status;
@@ -51,23 +52,28 @@ public abstract class AltosMapTile implements AltosFontListener {
else
format_string = "png";
return new File(AltosPreferences.mapdir(),
- String.format("map-%c%.6f,%c%.6f-%s%d.%s",
- chlat, lat, chlon, lon, maptype_string, zoom, format_string));
+ String.format("map-%c%.6f,%c%.6f-%s%d%s.%s",
+ chlat, lat, chlon, lon, maptype_string, zoom, scale == 1 ? "" : String.format("-%d", scale), format_string));
}
private String map_url() {
String format_string;
+ int z = zoom;
+
if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain)
format_string = "jpg";
else
format_string = "png32";
+ for (int s = 1; s < scale; s <<= 1)
+ z--;
+
if (AltosVersion.has_google_maps_api_key())
- return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&sensor=false&maptype=%s&format=%s&key=%s",
- center.lat, center.lon, zoom, px_size, px_size, AltosMap.maptype_names[maptype], format_string, AltosVersion.google_maps_api_key);
+ return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s&key=%s",
+ center.lat, center.lon, z, px_size/scale, px_size/scale, scale, AltosMap.maptype_names[maptype], format_string, AltosVersion.google_maps_api_key);
else
- return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&sensor=false&maptype=%s&format=%s",
- center.lat, center.lon, zoom, px_size, px_size, AltosMap.maptype_names[maptype], format_string);
+ return String.format("http://maps.google.com/maps/api/staticmap?center=%.6f,%.6f&zoom=%d&size=%dx%d&scale=%d&sensor=false&maptype=%s&format=%s",
+ center.lat, center.lon, z, px_size/scale, px_size/scale, AltosMap.maptype_names[maptype], format_string);
}
public void font_size_changed(int font_size) {
@@ -96,7 +102,7 @@ public abstract class AltosMapTile implements AltosFontListener {
public abstract void paint(AltosMapTransform t);
- public AltosMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
+ public AltosMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
this.listener = listener;
this.upper_left = upper_left;
this.cache = listener.cache();
@@ -110,8 +116,13 @@ public abstract class AltosMapTile implements AltosFontListener {
this.zoom = zoom;
this.maptype = maptype;
this.px_size = px_size;
+ this.scale = scale;
status = AltosMapTile.loading;
store = AltosMapStore.get(map_url(), map_file());
}
+
+ public AltosMapTile(AltosMapTileListener listener, AltosLatLon upper_left, AltosLatLon center, int zoom, int maptype, int px_size) {
+ this(listener, upper_left, center, zoom, maptype, px_size, 1);
+ }
}
diff --git a/altoslib/AltosPointInt.java b/altoslib/AltosPointInt.java
index e133ae9c..5d884391 100644
--- a/altoslib/AltosPointInt.java
+++ b/altoslib/AltosPointInt.java
@@ -28,4 +28,14 @@ public class AltosPointInt {
this.x = x;
this.y = y;
}
+
+ public AltosPointInt(double x, double y) {
+ this.x = (int) (x + 0.5);
+ this.y = (int) (y + 0.5);
+ }
+
+ public AltosPointInt(AltosPointDouble pt_d) {
+ this.x = (int) (pt_d.x + 0.5);
+ this.y = (int) (pt_d.y + 0.5);
+ }
}