Skip to content

Instantly share code, notes, and snippets.

@jonenzl
Created June 6, 2017 05:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonenzl/8867fa4f2701f9a9520b81d6478a58c2 to your computer and use it in GitHub Desktop.
Save jonenzl/8867fa4f2701f9a9520b81d6478a58c2 to your computer and use it in GitHub Desktop.
Calculates the distance between two GPS points using the Law of Haversines
/****************************************************************************
* arc_distance.c
*
* Calculates the distance between two GPS points using the Law of Haversines
***************************************************************************/
#include <stdio.h>
#include <math.h>
#define pi 3.14159265358979323846
double distance(double lat1, double lon1, double lat2, double lon2, char unit);
double deg2rad(double deg);
double rad2deg(double rad);
int main(void)
{
double x = distance(-36.9050478, 174.9245144, 33.7676334, -84.5610344, 'K');
printf("%f\n", x);
}
// Calculate the distance between two GPS points
double distance(double lat1, double lon1, double lat2, double lon2, char unit)
{
double theta, dist;
theta = lon1 - lon2;
dist = sin(deg2rad(lat1)) * sin(deg2rad(lat2)) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(deg2rad(theta));
dist = acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
switch(unit)
{
case 'M':
break;
case 'K':
dist = dist * 1.609344;
break;
}
return dist;
}
// This function converts decimal degrees to radians
double deg2rad(double deg)
{
return (deg * pi / 180);
}
// This function converts radians to decimal degrees
double rad2deg(double rad)
{
return (rad * 180 / pi);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment