martes, 14 de marzo de 2017

Cómo imprimir un punto a cada click del ratón sobre el Map Canvas con PyQGIS

La impresión de un punto a cada click del ráton es una acción muy útil que puede ser aprovechada, por ejemplo, para conformar un vectorial de puntos con el plugin QuickWKT, determinar los índices de (fila, columna) de un ráster o posicionar el cursor en una determinada posición del Map Canvas. Emplea objetos y métodos de la clase QgsMapToolEmitPoint para conectar a una función que permite desplegar las coordenadas de tales puntos en unidades de mapa, coordenadas de Map Canvas o coordenadas globales.



El código que se tiene a continuación puede ser adaptado para funcionar en un plugin pero, en este caso, imprime las coordenadas de los puntos a través de la Python Console de QGIS.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from qgis.gui import QgsMapToolEmitPoint

def display_point(point, mouse_button): 
    
    coords = "Map Coordinates: {:.4f}, {:.4f}".format(point.x(), point.y())
    print coords

    qpoint = pointTool.toCanvasCoordinates(point)

    print "Canvas Coordinates: ", qpoint

    print "Map Coordinates: {:.4f}  {:.4f}".format(pointTool.toMapCoordinates(qpoint).x(),
                                  pointTool.toMapCoordinates(qpoint).y())

    transformed_point = canvas.mapToGlobal(qpoint)
    
    print "global_point: ", transformed_point
    
# 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)

Después de inciado el script, el cursor sobre el Map Canvas cambia a aspecto de cruz y a cada click del ratón imprime de una sola vez en la Python Console las coordenadas del punto en unidades de mapa, en unidades de Map Canvas, en unidades de mapa a partir de estas últimas y en unidades globales (ver imagen siguiente).


No hay comentarios: