+ public static double valid_radius = 17000; /* 17km */
+
+ public String map_dir = null;
+ public String launch_sites_file = null;
+ public String key_file = null;
+
+ public void usage() {
+ System.out.printf("usage: altos-mapd [--mapdir <map-directory] [--launch-sites <launch-sites-file>]\n" +
+ " [--radius <valid-radius-m> [--port <port>] [--key <key-file>]\n");
+ System.exit(1);
+ }
+
+ private static Semaphore launch_sites_ready;
+
+ private static List<AltosLaunchSite> launch_sites;
+
+ public void notify_launch_sites(List<AltosLaunchSite> sites) {
+ synchronized (launch_sites_ready) {
+ if (sites != null) {
+ launch_sites = sites;
+ launch_sites_ready.release();
+ }
+ }
+ }
+
+ public static boolean check_lat_lon(double lat, double lon) {
+ synchronized (launch_sites_ready) {
+ if (launch_sites == null) {
+ try {
+ launch_sites_ready.acquire();
+ } catch (InterruptedException ie) {
+ return false;
+ }
+ }
+ }
+ if (launch_sites == null) {
+ System.out.printf("No launch site data available, refusing all requests\n");
+ return false;
+ }
+
+ for (AltosLaunchSite site : launch_sites) {
+ AltosGreatCircle gc = new AltosGreatCircle(site.latitude, site.longitude,
+ lat, lon);
+ if (gc.distance <= valid_radius)
+ return true;
+ }
+
+ return false;
+ }