// ----------------------------------------------------------------------
// Location Class member functions and utilites
//
// 10/3/95 Paul McNamee
// ----------------------------------------------------------------------

#include <math.h>

#include "Location.h"

// ----------------------------------------------------------------------
ostream& operator<< (ostream &os, const Location &l) {
  os << "Location: ["
     << l._latitude << ", "
     << l._longitude
     << "]" ;
  return os;
}

// ----------------------------------------------------------------------
float GreatCircleDistance(const Location &l1, const Location &l2) {
  float lat1 = l1.GetLatitude();
  float lat2 = l2.GetLatitude();
  float lon1 = l1.GetLongitude();
  float lon2 = l2.GetLongitude();
  float val;
  
  if ((lat1 == lat2) && (lon1 == lon2)) {
    val = 0.0;
  } else {
    lat1 *= DEG2RAD;
    lat2 *= DEG2RAD;
    lon1 *= DEG2RAD;
    lon2 *= DEG2RAD;

    val = 60.0 * ((acos((sin(lat1) * sin(lat2)) +
		      (cos(lat1) * cos(lat2) * cos(lon2 - lon1))))
		/ DEG2RAD);
  }
  return (val);
}

