]> err.no Git - mapper/commitdiff
Move latlon pairs distance calculation function from utils.c to latlon.c
authorKaj-Michael Lang <milang@angel.tal.org>
Sun, 22 Jul 2007 12:13:28 +0000 (15:13 +0300)
committerKaj-Michael Lang <milang@angel.tal.org>
Sun, 22 Jul 2007 12:13:28 +0000 (15:13 +0300)
src/latlon.c
src/utils.c

index 472a983e422c88b83a6315d72c8d5bc719e97022..ea4b2191f2d42eeeb398cf671086e2270a7272e2 100644 (file)
@@ -1,3 +1,6 @@
+/*
+ * Different Lat/Lon related function (conversion, distances, etc)
+ */
 #define _GNU_SOURCE
 
 #include <math.h>
@@ -9,6 +12,8 @@
 #define LATLON_MAX 2147483646
 #define LATLON_MIN -2147483646
 
+#define EARTH_RADIUS (3440.06479f)
+
 /* Convert latitude to integerized+mercator projected value */
 gint32
 lat2mp_int(gdouble lat)
@@ -24,3 +29,27 @@ lon2mp_int(gdouble lon)
 return lrint(lon/180*LATLON_MAX);
 }
 
+/**
+ * Calculate the distance between two lat/lon pairs.  The distance is returned
+ * in kilometer.
+ */
+gfloat calculate_distance(gfloat lat1, gfloat lon1, gfloat lat2, gfloat lon2)
+{
+gdouble dlat, dlon, slat, slon, a;
+
+/* Convert to radians. */
+lat1 *= (M_PI_4l / 180.f);
+lon1 *= (M_PI_4l / 180.f);
+lat2 *= (M_PI_4l / 180.f);
+lon2 *= (M_PI_4l / 180.f);
+
+dlat = lat2 - lat1;
+dlon = lon2 - lon1;
+
+slat = sinf(dlat / 2.f);
+slon = sinf(dlon / 2.f);
+a = (slat * slat) + (cosf(lat1) * cosf(lat2) * slon * slon);
+
+return ((2.f * atan2f(sqrtf(a), sqrtf(1.f - a))) * EARTH_RADIUS);
+}
+
index 75b5238f9a43f4f7b02e1c6b14dc87b7885b1cd8..43574cf65eb3b41051c157b087e67c1aa5199f31 100644 (file)
@@ -118,31 +118,6 @@ deg_format(DegFormat degformat, gfloat coor, gchar * scoor, gchar neg_char,
        vprintf("%s(): return\n", __PRETTY_FUNCTION__);
 }
 
-/**
- * Calculate the distance between two lat/lon pairs.  The distance is returned
- * in kilometers and should be converted using UNITS_CONVERT[_units].
- */
-gfloat calculate_distance(gfloat lat1, gfloat lon1, gfloat lat2, gfloat lon2)
-{
-       gdouble dlat, dlon, slat, slon, a;
-
-       /* Convert to radians. */
-       lat1 *= (PI / 180.f);
-       lon1 *= (PI / 180.f);
-       lat2 *= (PI / 180.f);
-       lon2 *= (PI / 180.f);
-
-       dlat = lat2 - lat1;
-       dlon = lon2 - lon1;
-
-       slat = sinf(dlat / 2.f);
-       slon = sinf(dlon / 2.f);
-       a = (slat * slat) + (cosf(lat1) * cosf(lat2) * slon * slon);
-
-       vprintf("%s(): return\n", __PRETTY_FUNCTION__);
-       return ((2.f * atan2f(sqrtf(a), sqrtf(1.f - a))) * EARTH_RADIUS);
-}
-
 /**
  * Convert the float lat/lon/speed/heading data into integer units.
  */