diff --git a/pyhamtools/frequency.py b/pyhamtools/frequency.py index 51ad88b..5f7583f 100644 --- a/pyhamtools/frequency.py +++ b/pyhamtools/frequency.py @@ -182,7 +182,7 @@ def freq_to_band(freq): elif ((freq >= 1200000) and (freq <= 1300000)): band = 0.23 #23cm mode = None - elif ((freq >= 2390000) and (freq <= 2450000)): + elif ((freq >= 2300000) and (freq <= 2450000)): band = 0.13 #13cm mode = None elif ((freq >= 3300000) and (freq <= 3500000)): @@ -200,7 +200,19 @@ def freq_to_band(freq): elif ((freq >= 47000000) and (freq <= 47200000)): band = 0.0063 #6,3mm mode = None + elif ((freq >= 75500000) and (freq <= 81500000)): + band = 0.004 #4mm + mode = None + elif ((freq >= 122250000) and (freq <= 123000000)): + band = 0.0025 #2.5mm + mode = None + elif ((freq >= 134000000) and (freq <= 141000000)): + band = 0.002 #2mm + mode = None + elif ((freq >= 241000000) and (freq <= 250000000)): + band = 0.001 #1mm + mode = None else: raise KeyError - return {"band": band, "mode": mode} \ No newline at end of file + return {"band": band, "mode": mode} diff --git a/pyhamtools/locator.py b/pyhamtools/locator.py index dc963d5..a37c7ea 100644 --- a/pyhamtools/locator.py +++ b/pyhamtools/locator.py @@ -9,7 +9,7 @@ def latlong_to_locator (latitude, longitude, precision=6): Args: latitude (float): Latitude longitude (float): Longitude - precision (int): 4,6,8 chars (default 6) + precision (int): 4,6,8,10 chars (default 6) Returns: string: Maidenhead locator @@ -33,7 +33,7 @@ def latlong_to_locator (latitude, longitude, precision=6): """ - if precision < 4 or precision ==5 or precision == 7 or precision > 8: + if precision < 4 or precision == 5 or precision == 7 or precision == 9 or precision > 10: return ValueError if longitude >= 180 or longitude <= -180: @@ -99,7 +99,7 @@ def locator_to_latlong (locator, center=True): locator = locator.upper() - if len(locator) < 4 or len(locator) == 5 or len(locator) == 7: + if len(locator) < 4 or len(locator) == 5 or len(locator) == 7 or len(locator) == 9: raise ValueError if ord(locator[0]) > ord('R') or ord(locator[0]) < ord('A'): @@ -126,6 +126,12 @@ def locator_to_latlong (locator, center=True): if ord (locator[7]) > ord('9') or ord(locator[7]) < ord('0'): raise ValueError + if len(locator) == 10: + if ord(locator[8]) > ord('X') or ord(locator[8]) < ord('A'): + raise ValueError + if ord (locator[9]) > ord('X') or ord(locator[9]) < ord('A'): + raise ValueError + longitude = (ord(locator[0]) - ord('A')) * 20 - 180 latitude = (ord(locator[1]) - ord('A')) * 10 - 90 longitude += (ord(locator[2]) - ord('0')) * 2 @@ -156,6 +162,20 @@ def locator_to_latlong (locator, center=True): longitude += 5.0 / 600 / 2 latitude += 2.5 / 600 / 2 + elif len(locator) == 10: + longitude += (ord(locator[4]) - ord('A')) * 5.0 / 60 + latitude += (ord(locator[5]) - ord('A')) * 2.5 / 60 + + longitude += int(locator[6]) * 5.0 / 600 + latitude += int(locator[7]) * 2.5 / 600 + + longitude += (ord(locator[8]) - ord('A')) * 1.0 / 2880 + latitude += (ord(locator[9]) - ord('A')) * 1.0 / 5760 + + if center: + longitude += 1.0 / 2880 / 2 + latitude += 1.0 / 5760 / 2 + else: raise ValueError diff --git a/test/test_locator_latlong_to_locator.py b/test/test_locator_latlong_to_locator.py index 0b5dd25..85b357a 100644 --- a/test/test_locator_latlong_to_locator.py +++ b/test/test_locator_latlong_to_locator.py @@ -23,6 +23,10 @@ class Test_latlong_to_locator(): assert latlong_to_locator(48.51760, 9.40345, precision=8) == "JN48QM84" assert latlong_to_locator(39.222916, -86.45416, 8) == "EM69SF53" + def test_latlong_to_locator_10chars_precision(self): + assert latlong_to_locator(45.835677, 68.525173, precision=10) == "MN45GU30AN" + assert latlong_to_locator(51.124913, 16.941840, 10) == "JO81LC39AX" + def test_latlong_to_locator_invalid_characters(self): # throws ValueError in Python2 and TypeError in Python3 diff --git a/test/test_locator_locator_to_latlong.py b/test/test_locator_locator_to_latlong.py index a5cf1d2..a35ad55 100644 --- a/test/test_locator_locator_to_latlong.py +++ b/test/test_locator_locator_to_latlong.py @@ -30,8 +30,7 @@ class Test_locator_to_latlong(): assert abs(latitude - 48.52083) < 0.00001 assert abs(longitude - 9.37500) < 0.00001 - def test_locator_to_latlong_8chars(self): - + def test_locator_to_latlong_8chars_precision(self): latitude, longitude = locator_to_latlong("JN48QM84") assert abs(latitude - 48.51875) < 0.00001 assert abs(longitude - 9.40416) < 0.00001 @@ -40,6 +39,15 @@ class Test_locator_to_latlong(): assert abs(latitude - 39.222916) < 0.00001 assert abs(longitude + 86.45416) < 0.00001 + def test_locator_to_latlong_10chars_precision(self): + latitude, longitude = locator_to_latlong("JO81LC39AX") + assert abs(latitude - 51.124913) < 0.000001 + assert abs(longitude - 16.941840) < 0.000001 + + latitude, longitude = locator_to_latlong("MN45GU30AN") + assert abs(latitude - 45.835677) < 0.000001 + assert abs(longitude - 68.525173) < 0.000001 + def test_locator_to_latlong_consistency_checks_6chars_lower_left_corner(self): latitude_4, longitude_4 = locator_to_latlong("JN48", center=False) @@ -97,6 +105,9 @@ class Test_locator_to_latlong(): with pytest.raises(ValueError): latitude, longitude = locator_to_latlong("JN8QM1") + with pytest.raises(ValueError): + latitude, longitude = locator_to_latlong("JN8QM1AA") + def test_locator_to_latlong_invalid_characters(self): with pytest.raises(ValueError):