En posts anteriores (1, 2, 3) se hizo referencia a la obtención de las coordenadas del Map Canvas de QGIS con un click del ratón mediante la clase QgsMapToolEmitPoint de PyQGIS. En esta nueva entrega vamos a emplear la simplificación producto de la utilización de una clase plantilla con QDialog para el mismo fin.
El código producido se encuentra a continuación: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 28 29 30 31 32 33 34 35 | from PyQt5.QtCore import Qt from qgis.gui import QgsMapToolEmitPoint class Dlg(QDialog): def __init__(self): QDialog.__init__(self) self.layout = QGridLayout(self) self.label1 = QLabel('Coordinates of map') self.line_edit = QLineEdit() self.line_edit.setFixedWidth(350) # Save reference to the QGIS interface self.iface = iface # a reference to our map canvas self.canvas = self.iface.mapCanvas() # this QGIS tool emits as QgsPoint after each click on the map canvas self.pointTool = QgsMapToolEmitPoint(self.canvas) self.layout.addWidget(self.label1, 0, 0) self.layout.addWidget(self.line_edit, 1, 0) self.pointTool.canvasClicked.connect(self.display_point) self.canvas.setMapTool(self.pointTool) def display_point(self, point, button): # report map coordinates from a canvas click coords = "{}, {}".format(point.x(), point.y()) self.line_edit.setText(str(coords)) w = Dlg() w.setWindowTitle('Map Canvas Coordinates Visor') w.setWindowFlags(Qt.WindowStaysOnTopHint) w.show() |
Después de ejecutado el script anterior en la Python Console de QGIS, el resultado puede ser visualizado en la imagen siguiente. Cada click del ratón con el ráster de referencia observado abajo permite recuperar en la QLineEdit embebida en el QDialog las coordenadas correspondientes del Map Canvas.
No hay comentarios:
Publicar un comentario