altosui: tile site maps
[fw/altos] / ao-tools / altosui / AltosGreatCircle.java
index 878da03e2b6a7ad2ade1e87fc97a19fa80055315..fb1b6ab3e129fa3781fcafe95a0e46a325cc083f 100644 (file)
@@ -28,8 +28,33 @@ public class AltosGreatCircle {
        static final double rad = Math.PI / 180;
        static final double earth_radius = 6371.2 * 1000;       /* in meters */
 
-       AltosGreatCircle (double start_lat, double start_lon,
-                         double end_lat, double end_lon)
+    static int BEARING_LONG = 0;
+    static int BEARING_SHORT = 1;
+    static int BEARING_VOICE = 2;
+    String bearing_words(int length) {
+        String [][] bearing_string = {
+          {
+            "North", "North North East", "North East", "East North East",
+            "East", "East South East", "South East", "South South East",
+            "South", "South South West", "South West", "West South West",
+            "West", "West North West", "North West", "North North West"
+          }, {
+            "N", "NNE", "NE", "ENE",
+            "E", "ESE", "SE", "SSE",
+            "S", "SSW", "SW", "WSW",
+            "W", "WNW", "NW", "NNW"
+          }, {
+            "north", "nor nor east", "north east", "east nor east",
+            "east", "east sow east", "south east", "sow sow east",
+            "south", "sow sow west", "south west", "west sow west",
+            "west", "west nor west", "north west", "nor nor west "
+          }
+        };
+        return bearing_string[length][(int)((bearing / 90 * 8 + 1) / 2)%16];
+    }
+
+       public AltosGreatCircle (double start_lat, double start_lon,
+                                double end_lat, double end_lon)
        {
                double lat1 = rad * start_lat;
                double lon1 = rad * -start_lon;
@@ -63,4 +88,13 @@ public class AltosGreatCircle {
                distance = d * earth_radius;
                bearing = course * 180/Math.PI;
        }
+
+       public AltosGreatCircle(AltosGPS start, AltosGPS end) {
+               this(start.lat, start.lon, end.lat, end.lon);
+       }
+
+       public AltosGreatCircle() {
+               distance = 0;
+               bearing = 0;
+       }
 }