Sunday, July 21, 2013

Calculate distance between two geolocations

The following methods can be used to calculate the actual distance between two geo locations in (lat, lon)

//get distance based on latitude and longitude
public static double GetDistance_m(double lat1, double lon1, double lat2, double lon2)
{
 double theta = lon1 - lon2;

 double dist = Math.Sin(Deg2Rad(lat1)) * Math.Sin(Deg2Rad(lat2)) + Math.Cos(Deg2Rad(lat1)) * Math.Cos(Deg2Rad(lat2)) * Math.Cos(Deg2Rad(theta));
 if (dist > 1)
  dist = 1;
 if (dist < -1)
  dist = -1;
 dist = Math.Acos(dist);
 dist = Rad2Deg(dist);
 dist = dist * 60 * 1.1515;
 dist = dist * 1609.344;
 return (dist);
}

//get distance based on latitude and longitude
public static double GetDistance_km(double lat1, double lon1, double lat2, double lon2)
{
 double theta = lon1 - lon2;

 double dist = Math.Sin(Deg2Rad(lat1)) * Math.Sin(Deg2Rad(lat2)) + Math.Cos(Deg2Rad(lat1)) * Math.Cos(Deg2Rad(lat2)) * Math.Cos(Deg2Rad(theta));
 if (dist > 1)
  dist = 1;
 if (dist < -1)
  dist = -1;
 dist = Math.Acos(dist);
 dist = Rad2Deg(dist);
 dist = dist * 60 * 1.1515;
 dist = dist * 1609.344 / 1000;
 return (dist);
}

 //convert degree to radian
public static double Deg2Rad(double deg)
{
 return (deg * Math.PI / 180.0);
}

//convert radian to degree
public static double Rad2Deg(double rad)
{
 return (rad / Math.PI * 180.0);

}

No comments:

Post a Comment