summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--altosui/AltosSiteMap.java4
-rw-r--r--altosui/AltosSiteMapCache.java15
-rw-r--r--altosui/AltosSiteMapPreload.java6
-rw-r--r--altosui/AltosUI.java2
4 files changed, 22 insertions, 5 deletions
diff --git a/altosui/AltosSiteMap.java b/altosui/AltosSiteMap.java
index d714e13c..105afade 100644
--- a/altosui/AltosSiteMap.java
+++ b/altosui/AltosSiteMap.java
@@ -182,7 +182,9 @@ public class AltosSiteMap extends JScrollPane implements AltosFlightDisplay {
}
}
- public static void prefetchMaps(double lat, double lng, int w, int h) {
+ public static void prefetchMaps(double lat, double lng) {
+ int w = AltosSiteMapPreload.width;
+ int h = AltosSiteMapPreload.height;
AltosSiteMap asm = new AltosSiteMap(true);
asm.centre = asm.getBaseLocation(lat, lng);
diff --git a/altosui/AltosSiteMapCache.java b/altosui/AltosSiteMapCache.java
index 40c8ff6b..03dc3cf5 100644
--- a/altosui/AltosSiteMapCache.java
+++ b/altosui/AltosSiteMapCache.java
@@ -25,8 +25,13 @@ import java.net.URL;
import java.net.URLConnection;
public class AltosSiteMapCache extends JLabel {
+ static final long google_maps_ratelimit_ms = 1200;
+ // Google limits static map queries to 50 per minute per IP, so
+ // each query should take at least 1.2 seconds.
+
public static boolean fetchMap(File file, String url) {
URL u;
+ long startTime = System.nanoTime();
try {
u = new URL(url);
@@ -70,6 +75,16 @@ public class AltosSiteMapCache extends JLabel {
}
return false;
}
+
+ 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();
+ }
+ }
+
return true;
}
diff --git a/altosui/AltosSiteMapPreload.java b/altosui/AltosSiteMapPreload.java
index fd648abc..66399557 100644
--- a/altosui/AltosSiteMapPreload.java
+++ b/altosui/AltosSiteMapPreload.java
@@ -213,7 +213,7 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener
AltosMapPos lat;
AltosMapPos lon;
- final static int radius = 4;
+ final static int radius = 5;
final static int width = (radius * 2 + 1);
final static int height = (radius * 2 + 1);
@@ -326,7 +326,7 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener
pane.setLayout(new GridBagLayout());
- map = new AltosSiteMap(4);
+ map = new AltosSiteMap(radius);
c.fill = GridBagConstraints.BOTH;
c.anchor = GridBagConstraints.CENTER;
@@ -464,4 +464,4 @@ public class AltosSiteMapPreload extends AltosUIDialog implements ActionListener
setLocationRelativeTo(owner);
setVisible(true);
}
-} \ No newline at end of file
+}
diff --git a/altosui/AltosUI.java b/altosui/AltosUI.java
index 50c5baab..5d459947 100644
--- a/altosui/AltosUI.java
+++ b/altosui/AltosUI.java
@@ -574,7 +574,7 @@ public class AltosUI extends AltosUIFrame {
} else {
double lat = Double.parseDouble(args[i+1]);
double lon = Double.parseDouble(args[i+2]);
- AltosSiteMap.prefetchMaps(lat, lon, 5, 5);
+ AltosSiteMap.prefetchMaps(lat, lon);
i += 2;
}
} else if (args[i].equals("--replay"))