X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/c84a96dabc4bea70c2d85af853b9c8f72ac06484..4f14a010d0a7d09721c32f0d35ffbeae05ea994c:/src/coords.c diff --git a/src/coords.c b/src/coords.c index c7ce8d61..25eb900c 100644 --- a/src/coords.c +++ b/src/coords.c @@ -35,10 +35,19 @@ renaming functions and defining LatLon and UTM structs. ** OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF ** SUCH DAMAGE. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#ifdef HAVE_STDLIB_H #include +#endif +#ifdef HAVE_STRING_H #include +#endif +#ifdef HAVE_MATH_H #include +#endif #include "viking.h" #include "globals.h" @@ -89,11 +98,14 @@ double a_coords_utm_diff( const struct UTM *utm1, const struct UTM *utm2 ) double a_coords_latlon_diff ( const struct LatLon *ll1, const struct LatLon *ll2 ) { static struct LatLon tmp1, tmp2; + gdouble tmp3; tmp1.lat = ll1->lat * PIOVER180; tmp1.lon = ll1->lon * PIOVER180; tmp2.lat = ll2->lat * PIOVER180; tmp2.lon = ll2->lon * PIOVER180; - return EquatorialRadius * acos(sin(tmp1.lat)*sin(tmp2.lat)+cos(tmp1.lat)*cos(tmp2.lat)*cos(tmp1.lon-tmp2.lon)); + tmp3 = EquatorialRadius * acos(sin(tmp1.lat)*sin(tmp2.lat)+cos(tmp1.lat)*cos(tmp2.lat)*cos(tmp1.lon-tmp2.lon)); + // For very small differences we can sometimes get NaN returned + return isnan(tmp3)?0:tmp3; } void a_coords_latlon_to_utm( const struct LatLon *latlon, struct UTM *utm )