mirror of
https://github.com/dh1tw/pyhamtools.git
synced 2025-12-06 06:52:00 +01:00
Add higher uWave bands and 10 char locators support (#32)
This commit is contained in:
parent
4bdaf8d335
commit
1a79467db1
|
|
@ -182,7 +182,7 @@ def freq_to_band(freq):
|
||||||
elif ((freq >= 1200000) and (freq <= 1300000)):
|
elif ((freq >= 1200000) and (freq <= 1300000)):
|
||||||
band = 0.23 #23cm
|
band = 0.23 #23cm
|
||||||
mode = None
|
mode = None
|
||||||
elif ((freq >= 2390000) and (freq <= 2450000)):
|
elif ((freq >= 2300000) and (freq <= 2450000)):
|
||||||
band = 0.13 #13cm
|
band = 0.13 #13cm
|
||||||
mode = None
|
mode = None
|
||||||
elif ((freq >= 3300000) and (freq <= 3500000)):
|
elif ((freq >= 3300000) and (freq <= 3500000)):
|
||||||
|
|
@ -200,7 +200,19 @@ def freq_to_band(freq):
|
||||||
elif ((freq >= 47000000) and (freq <= 47200000)):
|
elif ((freq >= 47000000) and (freq <= 47200000)):
|
||||||
band = 0.0063 #6,3mm
|
band = 0.0063 #6,3mm
|
||||||
mode = None
|
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:
|
else:
|
||||||
raise KeyError
|
raise KeyError
|
||||||
|
|
||||||
return {"band": band, "mode": mode}
|
return {"band": band, "mode": mode}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ def latlong_to_locator (latitude, longitude, precision=6):
|
||||||
Args:
|
Args:
|
||||||
latitude (float): Latitude
|
latitude (float): Latitude
|
||||||
longitude (float): Longitude
|
longitude (float): Longitude
|
||||||
precision (int): 4,6,8 chars (default 6)
|
precision (int): 4,6,8,10 chars (default 6)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
string: Maidenhead locator
|
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
|
return ValueError
|
||||||
|
|
||||||
if longitude >= 180 or longitude <= -180:
|
if longitude >= 180 or longitude <= -180:
|
||||||
|
|
@ -99,7 +99,7 @@ def locator_to_latlong (locator, center=True):
|
||||||
|
|
||||||
locator = locator.upper()
|
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
|
raise ValueError
|
||||||
|
|
||||||
if ord(locator[0]) > ord('R') or ord(locator[0]) < ord('A'):
|
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'):
|
if ord (locator[7]) > ord('9') or ord(locator[7]) < ord('0'):
|
||||||
raise ValueError
|
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
|
longitude = (ord(locator[0]) - ord('A')) * 20 - 180
|
||||||
latitude = (ord(locator[1]) - ord('A')) * 10 - 90
|
latitude = (ord(locator[1]) - ord('A')) * 10 - 90
|
||||||
longitude += (ord(locator[2]) - ord('0')) * 2
|
longitude += (ord(locator[2]) - ord('0')) * 2
|
||||||
|
|
@ -156,6 +162,20 @@ def locator_to_latlong (locator, center=True):
|
||||||
longitude += 5.0 / 600 / 2
|
longitude += 5.0 / 600 / 2
|
||||||
latitude += 2.5 / 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:
|
else:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,10 @@ class Test_latlong_to_locator():
|
||||||
assert latlong_to_locator(48.51760, 9.40345, precision=8) == "JN48QM84"
|
assert latlong_to_locator(48.51760, 9.40345, precision=8) == "JN48QM84"
|
||||||
assert latlong_to_locator(39.222916, -86.45416, 8) == "EM69SF53"
|
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):
|
def test_latlong_to_locator_invalid_characters(self):
|
||||||
|
|
||||||
# throws ValueError in Python2 and TypeError in Python3
|
# throws ValueError in Python2 and TypeError in Python3
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,7 @@ class Test_locator_to_latlong():
|
||||||
assert abs(latitude - 48.52083) < 0.00001
|
assert abs(latitude - 48.52083) < 0.00001
|
||||||
assert abs(longitude - 9.37500) < 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")
|
latitude, longitude = locator_to_latlong("JN48QM84")
|
||||||
assert abs(latitude - 48.51875) < 0.00001
|
assert abs(latitude - 48.51875) < 0.00001
|
||||||
assert abs(longitude - 9.40416) < 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(latitude - 39.222916) < 0.00001
|
||||||
assert abs(longitude + 86.45416) < 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):
|
def test_locator_to_latlong_consistency_checks_6chars_lower_left_corner(self):
|
||||||
|
|
||||||
latitude_4, longitude_4 = locator_to_latlong("JN48", center=False)
|
latitude_4, longitude_4 = locator_to_latlong("JN48", center=False)
|
||||||
|
|
@ -97,6 +105,9 @@ class Test_locator_to_latlong():
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
latitude, longitude = locator_to_latlong("JN8QM1")
|
latitude, longitude = locator_to_latlong("JN8QM1")
|
||||||
|
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
latitude, longitude = locator_to_latlong("JN8QM1AA")
|
||||||
|
|
||||||
def test_locator_to_latlong_invalid_characters(self):
|
def test_locator_to_latlong_invalid_characters(self):
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue