From 153c8c9cc45f0937c63f1b2248a0001836e8cac5 Mon Sep 17 00:00:00 2001 From: Al Date: Wed, 14 Oct 2015 15:10:58 -0400 Subject: [PATCH] [coordinates] Better handling for float DMS coordinates --- scripts/geodata/coordinates/conversion.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/geodata/coordinates/conversion.py b/scripts/geodata/coordinates/conversion.py index e8fa444a..75d3fbfb 100644 --- a/scripts/geodata/coordinates/conversion.py +++ b/scripts/geodata/coordinates/conversion.py @@ -39,7 +39,18 @@ def direction_sign(d): raise ValueError('Invalid direction: {}'.format(d)) +def int_or_float(d): + try: + return int(d) + except ValueError: + return float(d) + + def degrees_to_decimal(degrees, minutes, seconds): + degrees = int_or_float(degrees) + minutes = int_or_float(minutes) + seconds = int_or_float(seconds) + return degrees + (minutes / 60.0) + (seconds / 3600.0) @@ -59,7 +70,7 @@ def latlon_to_decimal(latitude, longitude): if lat_dms: d, m, s, c = lat_dms.groups() sign = direction_sign(c) - latitude = degrees_to_decimal(int(d or 0), int(m or 0), int(s or 0)) + latitude = degrees_to_decimal(d or 0, m or 0, s or 0) have_lat = True elif lat_dir: d, c = lat_dir.groups() @@ -76,7 +87,7 @@ def latlon_to_decimal(latitude, longitude): if lon_dms: d, m, s, c = lon_dms.groups() sign = direction_sign(c) - longitude = degrees_to_decimal(int(d or 0), int(m or 0), int(s or 0)) + longitude = degrees_to_decimal(d or 0, m or 0, s or 0) have_lon = True elif lon_dir: d, c = lon_dir.groups()