summaryrefslogtreecommitdiff
path: root/altoslib/AltosMapStore.java
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2016-05-11 10:47:31 -0700
committerKeith Packard <keithp@keithp.com>2016-05-11 23:22:15 -0700
commit0a50669b1fde3e3c1cbc08c4836613b58ead219b (patch)
tree8e4f0580d144a56e2a1a42995af5fb706de69a6b /altoslib/AltosMapStore.java
parent471091d0fddf09ed69df75e4f2fdd92e5f57b9c5 (diff)
altoslib: Clean up map file and url handling
move it all to AltosMapStore.java Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'altoslib/AltosMapStore.java')
-rw-r--r--altoslib/AltosMapStore.java46
1 files changed, 44 insertions, 2 deletions
diff --git a/altoslib/AltosMapStore.java b/altoslib/AltosMapStore.java
index aed365ca..ca4c9c75 100644
--- a/altoslib/AltosMapStore.java
+++ b/altoslib/AltosMapStore.java
@@ -28,6 +28,45 @@ public class AltosMapStore {
int status;
+ private static File map_file(AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ double lat = center.lat;
+ double lon = center.lon;
+ char chlat = lat < 0 ? 'S' : 'N';
+ char chlon = lon < 0 ? 'W' : 'E';
+
+ if (lat < 0) lat = -lat;
+ if (lon < 0) lon = -lon;
+ String maptype_string = String.format("%s-", AltosMap.maptype_names[maptype]);
+ String format_string;
+ if (maptype == AltosMap.maptype_hybrid || maptype == AltosMap.maptype_satellite || maptype == AltosMap.maptype_terrain)
+ format_string = "jpg";
+ else
+ format_string = "png";
+ return new File(AltosPreferences.mapdir(),
+ 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 static String map_url(AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ 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&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&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 int status() {
return status;
}
@@ -229,16 +268,19 @@ public class AltosMapStore {
static HashMap<String,AltosMapStore> stores = new HashMap<String,AltosMapStore>();
- public static AltosMapStore get(String url, File file) {
+ public static AltosMapStore get(AltosLatLon center, int zoom, int maptype, int px_size, int scale) {
+ String url = map_url(center, zoom, maptype, px_size, scale);
+
AltosMapStore store;
synchronized(stores) {
if (stores.containsKey(url)) {
store = stores.get(url);
} else {
- store = new AltosMapStore(url, file);
+ store = new AltosMapStore(url, map_file(center, zoom, maptype, px_size, scale));
stores.put(url, store);
}
}
return store;
}
+
}