public static double Distance(Vector2D coordinate1, Vector2D coordinate2)
 {
     double distance = 0.0;
     var distanceCord = coordinate2 - coordinate1;
     var a = Math.Pow(Math.Sin(ToRadian(distanceCord.X) / 2), 2)
         + Math.Cos(ToRadian(coordinate1.X)) * Math.Cos(ToRadian(coordinate2.X)) * Math.Pow(Math.Sin(ToRadian(distanceCord.Y) / 2), 2);
     var c = 2 * Math.Atan2(Math.Pow(a, 0.5), Math.Pow(1 - a, 0.5));
     var d = R_TH_BKK * c;
     distance = d;
     return distance;
 }
 //project this vector on to v, return signed magnatude
 public Vector2D Project(Vector2D v, out double mag)
 {
     double thisDotV = this * v;
     mag = thisDotV;
     return v * thisDotV;
 }
 //negative
 public static Vector2D operator -(Vector2D R)
 {
     Vector2D temp = new Vector2D(-R.X, -R.Y);
     return temp;
 }
 //project this vector on to v
 public Vector2D Project(Vector2D v)
 {
     double thisDotV = this * v;
     return v * thisDotV;
 }