Fix CQ/ITU lookups for zones that cross the antemeridian

This commit is contained in:
Ian Renton
2026-02-14 07:47:02 +00:00
parent 4c22861666
commit 6e7ffd626e

View File

@@ -40,11 +40,21 @@ def lat_lon_to_cq_zone(lat, lon):
# Finds out which ITU zone a lat/lon point is in. # Finds out which ITU zone a lat/lon point is in.
def lat_lon_to_itu_zone(lat, lon): def lat_lon_to_itu_zone(lat, lon):
lon = ((lon + 180) % 360) - 180
for index, row in itu_zone_data.iterrows(): for index, row in itu_zone_data.iterrows():
polygon = Polygon(row["geometry"]) polygon = Polygon(row["geometry"])
test_point = Point(lon, lat) test_point = Point(lon, lat)
if polygon.contains(test_point): if polygon.contains(test_point):
return int(row["name"]) return int(row["name"])
# Might have problems around the antemeridian, so if we didn't find a match, try offsetting the point by + or -
# 360 degrees longitude to try the other side of the Earth
if lon < 0:
test_point = Point(lon + 360, lat)
else:
test_point = Point(lon - 360, lat)
if polygon.contains(test_point):
return int(row["name"])
return None return None