From 931b30cbce69cfb55ac9cd10281559d58abc3f42 Mon Sep 17 00:00:00 2001 From: Corentin Date: Tue, 9 Sep 2025 15:38:37 +0900 Subject: [PATCH] Fix drawing outside borders --- map.py | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/map.py b/map.py index 0dd4284..7f5c134 100644 --- a/map.py +++ b/map.py @@ -111,7 +111,6 @@ def main(): del arguments bounds, nodes, ways, relations = parse_xml(osm_path) - print(f'{bounds} {len(nodes)=} {len(ways)=} {len(relations)=}') if convert_data: with (osm_path.parent / f'{osm_path.stem}.json').open(mode='w', encoding='utf-8') as json_file: @@ -169,9 +168,7 @@ def main(): coords = [] for node_id in way.nodes: node = nodes[node_id] - new_coord = ( - min(max((node.lon - bounds.minlon) * lon_scale, 0), map_width), - min(max(map_height - ((node.lat - bounds.minlat) * lat_scale), 0), map_height)) + new_coord = ((node.lon - bounds.minlon) * lon_scale, map_height - ((node.lat - bounds.minlat) * lat_scale)) if not coords or new_coord != coords[-1]: coords.append(new_coord) draw.polygon(coords, fill=color, outline=outline, width=width) @@ -181,9 +178,7 @@ def main(): coords = [] for node_id in way.nodes: node = nodes[node_id] - new_coord = ( - min(max((node.lon - bounds.minlon) * lon_scale, 0), map_width), - min(max(map_height - ((node.lat - bounds.minlat) * lat_scale), 0), map_height)) + new_coord = ((node.lon - bounds.minlon) * lon_scale, map_height - ((node.lat - bounds.minlat) * lat_scale)) if not coords or new_coord != coords[-1]: coords.append(new_coord) draw.line(coords, width=width, fill=color, joint=joint) @@ -221,29 +216,28 @@ def main(): if 'highway' in way.tags: match way.tags['highway']: case 'motorway' | 'motorway_link': - draw_way_line(way, 15, (220, 160, 160), joint='curve') + draw_way_line(way, 25, (220, 160, 160), joint='curve') case 'trunk' | 'trunk_link': - draw_way_line(way, 13, bridge_outline if 'bridge' in way.tags else (230, 180, 130), joint='curve') - draw_way_line(way, 11, (240, 200, 170), joint='curve') + draw_way_line(way, 21, bridge_outline if 'bridge' in way.tags else (230, 180, 130), joint='curve') + draw_way_line(way, 19, (240, 200, 170), joint='curve') case 'primary' | 'primary_link': - draw_way_line(way, 11, bridge_outline if 'bridge' in way.tags else (230, 200, 110), joint='curve') - draw_way_line(way, 9, (245, 225, 150), joint='curve') + draw_way_line(way, 19, bridge_outline if 'bridge' in way.tags else (230, 200, 110), joint='curve') + draw_way_line(way, 17, (245, 225, 150), joint='curve') case 'secondary' | 'secondary_link': - draw_way_line(way, 11, bridge_outline if 'bridge' in way.tags else (200, 200, 140), joint='curve') - draw_way_line(way, 9, (220, 220, 180), joint='curve') + draw_way_line(way, 17, bridge_outline if 'bridge' in way.tags else (200, 200, 140), joint='curve') + draw_way_line(way, 15, (220, 220, 180), joint='curve') case 'tertiary' | 'tertiraty_link': - draw_way_line(way, 9, bridge_outline if 'bridge' in way.tags else (160, 160, 160), joint='curve') - draw_way_line(way, 7, (245, 245, 245), joint='curve') + draw_way_line(way, 15, bridge_outline if 'bridge' in way.tags else (160, 160, 160), joint='curve') + draw_way_line(way, 13, (245, 245, 245), joint='curve') case 'residential' | 'unclassified' | 'road': - draw_way_line(way, 7, bridge_outline if 'bridge' in way.tags else (160, 160, 160), joint='curve') - draw_way_line(way, 5, (250, 250, 250), joint='curve') + draw_way_line(way, 13, bridge_outline if 'bridge' in way.tags else (160, 160, 160), joint='curve') + draw_way_line(way, 11, (250, 250, 250), joint='curve') elif 'waterway' in way.tags and way.tags['waterway'] in {'river', 'steam', 'tidal_channel', 'flowline'}: - draw_way_line(way, 11, (180, 200, 240), joint='curve') + draw_way_line(way, 21, (180, 200, 240), joint='curve') elif 'building' in way.tags: draw_way_polygon(way, (190, 180, 160), outline=(120, 120, 120)) image = cv2.cvtColor(np.asarray(image), cv2.COLOR_BGR2RGB) - print(f'{image.shape=}') cv2.namedWindow('map', cv2.WINDOW_KEEPRATIO) while cv2.waitKey(50) & 0xff != ord('q'): cv2.imshow('map', image)