diff --git a/map.py b/map.py index 1382ae6..aa3067c 100644 --- a/map.py +++ b/map.py @@ -167,20 +167,14 @@ def main(): # math.degrees(2 * math.atan(math.exp(y / zoom_scale)) - math.pi / 2.) # ) - map_width = 0 - map_height = 0 - min_x = 0 - max_y = 0 - for zoom_level in range(50): - zoom_scale = 2**zoom_level / 2 * math.pi - min_x, min_y = get_map_raw_coords(bounds.minlon, bounds.minlat) - max_x, max_y = get_map_raw_coords(bounds.maxlon, bounds.maxlat) - map_width = max_x - min_x - if map_width >= map_target_width: - map_height = abs(max_y - min_y) - break + zoom_level = 1 + int(-math.log2(((bounds.maxlon - bounds.minlon) * 2 * math.pi) / map_target_width)) + zoom_scale = (2**zoom_level * map_target_width) / (2 * math.pi) + min_x, min_y = get_map_raw_coords(bounds.minlon, bounds.minlat) + max_x, max_y = get_map_raw_coords(bounds.maxlon, bounds.maxlat) + map_width = max_x - min_x + map_height = max_y - min_y - assert map_width > 0 and 0 < map_height < map_width * 3 + assert map_width > 0 and 0 < map_height < map_width * 10 def get_map_coords(lon: float, lat: float) -> tuple[int, int]: nonlocal min_x, max_y