*
* 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
* 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.net.*;
chlat, lat, chlon, lon, maptype_string, zoom, scale == 1 ? "" : String.format("-%d", scale), format_string));
}
+ public static String google_maps_api_key = null;
+
+ private static String google_map_url(AltosLatLon center, int zoom, int maptype, int px_size, int scale, String 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&key=%s",
+ center.lat, center.lon, zoom, px_size, px_size, scale,
+ AltosMap.maptype_names[maptype], format_string, google_maps_api_key);
+ }
+
+ private static String altos_map_url(AltosLatLon center, int zoom, int maptype, int px_size, int scale, String format_string) {
+ return String.format("https://maps.altusmetrum.org/cgi-bin/altos-map?lat=%.6f&lon=%.6f&zoom=%d",
+ center.lat, center.lon, zoom);
+ }
+
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";
format_string = "png32";
for (int s = 1; s < scale; s <<= 1)
- z--;
+ zoom--;
- 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);
+ px_size /= scale;
+
+ if (google_maps_api_key != null)
+ return google_map_url(center, zoom, maptype, px_size, scale, format_string);
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);
+ return altos_map_url(center, zoom, maptype, px_size, scale, format_string);
}
- public int status() {
+ public synchronized int status() {
return status;
}
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;
synchronized (forbidden_lock) {
forbidden_time = System.nanoTime();
forbidden_set = true;
+ forbidden_response = response;
return AltosMapTile.forbidden;
}
}
int new_status;
- if (!AltosVersion.has_google_maps_api_key()) {
- synchronized (fetch_lock) {
- long startTime = System.nanoTime();
- new_status = fetch_url();
- if (new_status == AltosMapTile.fetched) {
- long duration_ms = (System.nanoTime() - startTime) / 1000000;
- if (duration_ms < google_maps_ratelimit_ms) {
- try {
- Thread.sleep(google_maps_ratelimit_ms - duration_ms);
- } catch (InterruptedException e) {
- Thread.currentThread().interrupt();
- }
- }
- }
- }
- } else {
- new_status = fetch_url();
- }
+ new_status = fetch_url();
+
notify_listeners(new_status);
} finally {
finish_fetcher();