"""Lightweight MapVisualizer: minimal display helper using OpenCV if available.""" from typing import Optional, Callable try: import cv2 CV2_AVAILABLE = True except Exception: cv2 = None CV2_AVAILABLE = False class MapVisualizer: def __init__(self, engine): self.engine = engine self.callback_on_click: Optional[Callable[[float, float], None]] = None def set_click_callback(self, callback: Callable[[float, float], None]): self.callback_on_click = callback def show_pil_image(self, pil_image): if pil_image is None: return if CV2_AVAILABLE: import numpy as np img = pil_image.convert('RGB') arr = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR) cv2.imshow('Map', arr) cv2.waitKey(0) cv2.destroyAllWindows() else: # Fallback: save temp file and open with default image viewer import tempfile, os tmp = tempfile.NamedTemporaryFile(delete=False, suffix='.png') pil_image.save(tmp.name) tmp.close() if os.name == 'nt': os.startfile(tmp.name) # type: ignore else: try: import webbrowser webbrowser.open('file://' + tmp.name) except Exception: pass def show_point(self, lat: float, lon: float, zoom: int = 12, tiles_radius: int = 1): img = self.engine.get_image_for_point(lat, lon, zoom, tiles_radius=tiles_radius) self.show_pil_image(img)