38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
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)
|