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:
Publicar un comentario