From 990fdff47348af3d2941d590d03589eaa9d3ff41 Mon Sep 17 00:00:00 2001 From: Al Date: Tue, 4 Oct 2016 02:58:01 -0400 Subject: [PATCH] [coordinates] adding to_valid_latitude to bound 90 and -90 degrees --- scripts/geodata/coordinates/conversion.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/geodata/coordinates/conversion.py b/scripts/geodata/coordinates/conversion.py index 01402ced..e1cde996 100644 --- a/scripts/geodata/coordinates/conversion.py +++ b/scripts/geodata/coordinates/conversion.py @@ -19,6 +19,7 @@ import math import re from geodata.encoding import safe_decode +from geodata.math.floats import isclose beginning_re = re.compile('^[^0-9\-]+', re.UNICODE) end_re = re.compile('[^0-9]+$', re.UNICODE) @@ -78,6 +79,19 @@ def is_valid_longitude(longitude): return not math.isinf(longitude) and not math.isnan(longitude) +def to_valid_latitude(latitude): + '''Convert longitude into the -180 to 180 scale''' + if not is_valid_latitude(latitude): + raise ValueError('Invalid latitude {}'.format(latitude)) + + if isclose(latitude, 90.0): + latitude = 89.9999 + elif isclose(latitude, -90.0): + latitude = -89.9999 + + return latitude + + def to_valid_longitude(longitude): '''Convert longitude into the -180 to 180 scale''' if not is_valid_longitude(longitude): @@ -145,6 +159,7 @@ def latlon_to_decimal(latitude, longitude): if not is_valid_longitude(longitude): raise ValueError('Invalid longitude: {}'.format(longitude)) + latitude = to_valid_latitude(latitude) longitude = to_valid_longitude(longitude) return latitude, longitude