private Bounds calculateBounds() {
   Bounds result = null;
   for (WayPoint wpt : wayPoints) {
     if (result == null) {
       result = new Bounds(wpt.getCoor());
     } else {
       result.extend(wpt.getCoor());
     }
   }
   return result;
 }
 protected double calculateLength() {
   double result = 0.0; // in meters
   WayPoint last = null;
   for (WayPoint tpt : wayPoints) {
     if (last != null) {
       Double d = last.getCoor().greatCircleDistance(tpt.getCoor());
       if (!d.isNaN() && !d.isInfinite()) {
         result += d;
       }
     }
     last = tpt;
   }
   return result;
 }