sábado, 1 de julio de 2017

Obtener coordenadas de un click del ratón mediante una clase personalizada en PyQGIS

En un post anterior se hizo mención a la forma de recuperar las coordenadas de un punto mediante un click del ratón empleando la clase QgsMapToolEmitPoint de PyQGIS. La forma como está allí expresada se basa en una analogía con relación a un código tomado del libro de Gary Sherman para la clase QgsMapToolEmitPoint. Sin embargo, ésto es mucho más fácil con esta nueva versión simplificada del código.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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 )

No obstante, tal como se señaló en el título, la idea es hacerlo con una clase personalizada porque se pueden añadir métodos para realizar otros procedimientos útiles. El código completo es el siguiente:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
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 ) 

En la imagen siguiente se observa el resultado de la ejecución del código después de haber clickeado en varios puntos arbitrarios del Map Canvas.


No hay comentarios: