Estoy trabajando en un script de python que me dará la x,la y y la profundidad de coordenadas en QGIS. He profundidad como un atributo de la capa de trama. Mi objetivo es conseguir una barra de estado que muestra x,y y la profundidad de coordenadas cuando el ratón está en un determinado punto del lienzo. El código que he utilizado es:
from qgis.gui import *
from PyQt4.QtGui import QAction, QMainWindow, QApplication
from PyQt4.QtCore import SIGNAL, Qt
class MyWnd(QMainWindow):
def __init__(self,layer):
QMainWindow.__init__(self)
self.statusBar().showMessage(u"x:-,y:-")
self.canvas = QgsMapCanvas()
self.canvas.setCanvasColor(Qt.white)
self.canvas.setExtent(layer.extent())
self.canvas.setLayerSet([QgsMapCanvasLayer(layer)])
self.setCentralWidget(self.canvas)
actionZoomIn = QAction("Zoom in", self)
actionZoomOut = QAction("Zoom out", self)
actionPan = QAction("Pan", self)
actionZoomIn.setCheckable(True)
actionZoomOut.setCheckable(True)
actionPan.setCheckable(True)
self.connect(actionZoomIn, SIGNAL("triggered()"), self.zoomIn)
self.connect(actionZoomOut, SIGNAL("triggered()"), self.zoomOut)
self.connect(actionPan, SIGNAL("triggered()"), self.pan)
self.toolbar = self.addToolBar("Canvas actions")
self.toolbar.addAction(actionZoomIn)
self.toolbar.addAction(actionZoomOut)
self.toolbar.addAction(actionPan)
# create the map tools
self.toolPan = QgsMapToolPan(self.canvas)
self.toolPan.setAction(actionPan)
self.toolZoomIn = QgsMapToolZoom(self.canvas, False) # false = in
self.toolZoomIn.setAction(actionZoomIn)
self.toolZoomOut = QgsMapToolZoom(self.canvas, True) # true = out
self.toolZoomOut.setAction(actionZoomOut)
self.pan()
def zoomIn(self):
self.canvas.setMapTool(self.toolZoomIn)
def zoomOut(self):
self.canvas.setMapTool(self.toolZoomOut)
def pan(self):
self.canvas.setMapTool(self.toolPan)
def eventFilter(self,source,event):
if event.type()==Qt.Event.MouseMove:
if event.buttons()==Qt.NoButton:
pos=event.pos()
x=pos.x()
y=pos.y()
p=selfcanvas.getCoordinateTransform().toMapCoordinates(x,y)
self.statusBar().showMessage(u"x:%s,y:%s" %(p.x(),p.y()))
else:
pass
return QMainWindow.eventFilter(self,source,event)
Este archivo que tengo guardado como mywnd.py en la carpeta Python27 Luego en la consola de python en qgis yo uso
import mywnd
w=mywnd.MyWnd(qgis.utils.iface.activeLayer())
w.show()
Esto me da a mi la capa activa, pero todavía no puedo averiguar cómo obtener los valores de x y y en la barra de estado. Yo también no soy muy bueno en python.