X-Git-Url: https://git.gag.com/?p=fw%2Faltos;a=blobdiff_plain;f=altoslib%2FAltosMapStore.java;h=4eba3a044296987c5f1ebaa3b0a3cff548a8e3de;hp=aed365ca175e07ea81abe05b7535b707227887dd;hb=110e4818b85781c33d683b7b7e7f2864a1223c5c;hpb=e0081f7ba6fc9f1e4484d3e291fd30065ad5b620 diff --git a/altoslib/AltosMapStore.java b/altoslib/AltosMapStore.java index aed365ca..4eba3a04 100644 --- a/altoslib/AltosMapStore.java +++ b/altoslib/AltosMapStore.java @@ -3,7 +3,8 @@ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; version 2 of the License. + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of @@ -15,7 +16,7 @@ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ -package org.altusmetrum.altoslib_10; +package org.altusmetrum.altoslib_12; import java.io.*; import java.net.*; @@ -28,6 +29,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; } @@ -51,6 +91,7 @@ public class AltosMapStore { static Object forbidden_lock = new Object(); static long forbidden_time; static boolean forbidden_set; + public static int forbidden_response; private int fetch_url() { URL u; @@ -76,6 +117,7 @@ public class AltosMapStore { synchronized (forbidden_lock) { forbidden_time = System.nanoTime(); forbidden_set = true; + forbidden_response = response; return AltosMapTile.forbidden; } } @@ -229,16 +271,19 @@ public class AltosMapStore { static HashMap stores = new HashMap(); - 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; } + }