from qgis.gui import QgsMapTool from qgis.PyQt.QtCore import pyqtSignal from qgis.PyQt.QtGui import QCursor from qgis.PyQt.QtCore import Qt class PointCaptureTool(QgsMapTool): """ Outil de capture d'un point sur la carte QGIS. Émet pointCaptured(x, y, crs) au clic gauche. Se désactive automatiquement après un clic. """ pointCaptured = pyqtSignal(float, float, object) def __init__(self, canvas, previous_tool=None): super().__init__(canvas) self.canvas = canvas self.previous_tool = previous_tool self.setCursor(QCursor(Qt.CrossCursor)) def canvasReleaseEvent(self, event): if event.button() == Qt.LeftButton: point = self.toMapCoordinates(event.pos()) crs = self.canvas.mapSettings().destinationCrs() self.pointCaptured.emit(point.x(), point.y(), crs) # Restaurer l'outil précédent if self.previous_tool: self.canvas.setMapTool(self.previous_tool) else: self.canvas.unsetMapTool(self) def keyPressEvent(self, event): if event.key() == Qt.Key_Escape: if self.previous_tool: self.canvas.setMapTool(self.previous_tool) else: self.canvas.unsetMapTool(self)