Bump java lib versions in preparation for 1.9.2
[fw/altos] / altoslib / AltosMapPath.java
index c2335169383393430acf907e39e65d37f5172930..67f35f6c367ac1a226e4f2bc19e67adb55028469 100644 (file)
@@ -16,7 +16,7 @@
  * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
  */
 
-package org.altusmetrum.altoslib_11;
+package org.altusmetrum.altoslib_14;
 
 import java.io.*;
 import java.lang.Math;
@@ -32,19 +32,44 @@ public abstract class AltosMapPath {
 
        public abstract void paint(AltosMapTransform t);
 
-       public AltosMapRectangle add(double lat, double lon, int state) {
-               AltosMapPathPoint               point = new AltosMapPathPoint(new AltosLatLon (lat, lon), state);
+       public AltosMapRectangle add(AltosGPS gps, double time, int state, double gps_height) {
+               AltosMapPathPoint               point = new AltosMapPathPoint(gps, time, state, gps_height);
                AltosMapRectangle       rect = null;
 
                if (!point.equals(last_point)) {
                        if (last_point != null)
-                               rect = new AltosMapRectangle(last_point.lat_lon, point.lat_lon);
+                               rect = new AltosMapRectangle(last_point.gps.lat_lon(), point.gps.lat_lon());
                        points.add (point);
                        last_point = point;
                }
                return rect;
        }
 
+       private double dist(AltosLatLon lat_lon, AltosMapPathPoint point) {
+               return (new AltosGreatCircle(lat_lon.lat,
+                                            lat_lon.lon,
+                                            point.gps.lat,
+                                            point.gps.lon)).distance;
+       }
+
+       public AltosMapPathPoint nearest(AltosLatLon lat_lon) {
+               AltosMapPathPoint nearest = null;
+               double nearest_dist = 0;
+               for (AltosMapPathPoint point : points) {
+                       if (nearest == null) {
+                               nearest = point;
+                               nearest_dist = dist(lat_lon, point);
+                       } else {
+                               double d = dist(lat_lon, point);
+                               if (d < nearest_dist) {
+                                       nearest = point;
+                                       nearest_dist = d;
+                               }
+                       }
+               }
+               return nearest;
+       }
+
        public void clear () {
                points = new LinkedList<AltosMapPathPoint>();
        }