Modificando plugin ‘Value Tool’ de QGIS para incluir una QTextBrowser

En un post anterior se modificó el plugin ‘Value Tool’ de QGIS para incluir índices de fila, columna de un ráster. Esto permitió incrementar la utilidad del plugin; sobre todo en la comprobación de resultados de geoprocesos.

No obstante, existen otras múltiples opciones de modificación que podrían realizarse. Por ejemplo, incrementar la funcionalidad del hecho de conocer en tiempo real los valores de las coordenadas cada vez que movemos el cursor a través de la Map View. Esto se realiza a través del objeto ‘statusLabel’ que se señala en el cuadrilátero rojo de la imagen siguiente:

value_tool4

Tal como está implementado, es imposible copiar los valores del objeto ‘statusLabel’ para ser usados, por ejemplo, en la creación de una capa de puntos mediante el plugin ‘QuickWKT’. No obstante, esto puede ser rápidamente remediado añadiendo una QTextBrowser y programado el slot ‘printInTable’ del plugin ‘Value Tool’.

El primer paso para que ello sea posible es añadir las instrucciones siguientes al archivo ui_valuewidgetbase.py:

.
.
.        
        #add for mouse clip
        self.textBrowser = QtGui.QTextBrowser(ValueWidgetBase) #added
        self.textBrowser.setText(_fromUtf8(""))  #added
        self.textBrowser.setObjectName(_fromUtf8("textBrowser")) #added
        self.verticalLayout.addWidget(self.textBrowser) #added
.
.
.

Para que la QTextBrowser imprima simultáneamente con el ‘statusLabel’ los valores de las coordenadas hay que modificar el slot ‘pintInTable’, del archivo valuewidget.py, añadiendo la ante y penúltimas líneas del ‘snipped code’ siguiente:

.
.
.
    def printInTable(self, position, layers):  #added
.
.
.
          self.tableWidget.item(irow,0).setText(layername) 
          self.tableWidget.item(irow,1).setText(value)
          if value == 'out of extent': #added
              row = 'out of extent'    #added
              col = 'out of extent'    #added
          self.tableWidget.item(irow,2).setText(str(row))  #added
          self.tableWidget.item(irow,3).setText(str(col))  #added
          message2 = str(position.x()) + " " + str(position.y()) #added
          self.textBrowser.setText(message2)  #added
            
          irow+=1
.
.
.

Para capturar las coordenadas de un punto es necesario ir a la pestaña ‘Options’ del plugin para marcar ‘Plot values only when mouse is clicked’; tal como se observa en la imagen siguiente:

valuetool5

En la imagen a continuación se observa la captura del punto mediante click del ratón y su visualización a través del plugin ‘QuickWKT’:

value_tool6

Sin embargo, ya que le pasamos una referencia de la fila y columna del ráster puede ser más útil implementar, por ejemplo, una rutina para determinar las coordenadas del centroide de cada celda. El código siguiente lo hace para la capa ráster activa.

.
.
.
    def printInTable(self, position, layers):  #added
.
.
.
          self.tableWidget.item(irow,2).setText(str(row))  #added
          self.tableWidget.item(irow,3).setText(str(col))  #added
          
          xx = xMin + xSize/2
          yy = yMax - ySize/2

          if row != "out of extent" and col != "out of extent":
              xx += (col - 1) * xSize
              yy -= (row - 1) * ySize

          message = str(xx) + " " + str(yy)
          message2 = str(position.x()) + " " + str(position.y()) #added
          self.textBrowser.setText(message)  #added
          
          irow+=1
.
.
.

tal como se tiene en la imagen siguiente después de capturar 2 de tales puntos.

value_tool7

Esta entrada fue publicada en Plugin, PyQGIS, QGIS, Software Libre. Guarda el enlace permanente.

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s