I want to get x/y coordinates of a point on mouse click for a point and need to use those coordinates to evaluate other values as per other modules already define.
How can I get x/y coordinates on mouse click in QGIS and print those in PyQGIS?
I want to get x/y coordinates of a point on mouse click for a point and need to use those coordinates to evaluate other values as per other modules already define.
How can I get x/y coordinates on mouse click in QGIS and print those in PyQGIS?
You need QgsMapToolEmitPoint class to do that. Following code works well for that purpose:
from qgis.gui import QgsMapToolEmitPoint
def display_point( pointTool ):
print '({:.4f}, {:.4f})'.format(pointTool[0], pointTool[1])
# a reference to our map canvas
canvas = iface.mapCanvas()
# this QGIS tool emits as QgsPoint after each click on the map canvas
pointTool = QgsMapToolEmitPoint(canvas)
pointTool.canvasClicked.connect( display_point )
canvas.setMapTool( pointTool )
However, if you prefer a class, following code can also be used:
from qgis.gui import QgsMapToolEmitPoint
class PrintClickedPoint(QgsMapToolEmitPoint):
def __init__(self, canvas):
self.canvas = canvas
QgsMapToolEmitPoint.__init__(self, self.canvas)
def canvasPressEvent( self, e ):
point = self.toMapCoordinates(self.canvas.mouseLastXY())
print '({:.4f}, {:.4f})'.format(point[0], point[1])
canvas_clicked = PrintClickedPoint( iface.mapCanvas() )
iface.mapCanvas().setMapTool( canvas_clicked )
unsetMapTool(canvas_clicked)
Commented
Jul 29, 2019 at 14:11
canvas.setMapTool( pointTool )
- it outputs noting to the console, yet the crosshair shows on the mapcanvas. Thanks @xunilk
Commented
Nov 17, 2020 at 19:22