Uso de las QCheckBox en un plugin de QGIS para convertir coordenadas

Basado en un post anterior, me propuse a crear un plugin de QGIS que permitiese la conversión de coordenadas geográficas a UTM utilizando diferentes elipsoides. La materialización del mismo puede observarse en la imagen siguiente donde el resultado obtenido corresponde a las coordenadas del vértice de Llatías (Cantabria, España).

conversor1

Sin embargo, la utilidad del plugin es muy limitada si quiero convertir, por ejemplo, cientos o miles de coordenadas. Por ello, tengo que aprovechar todas las funciones que están dentro del plugin para sistematizar el proceso. Se me ocurre, como primera aproximación, utilizar una QCheckBox para desconectar la entrada individual de datos y advertir que se van a convertir datos de manera masiva. Con el QtDesigner realicé este primer esbozo:

conversor2

Ahora sólo hay que programar la conexión/desconexión en el slot (función ‘change_status’). El código propuesto en el plugin es el siguiente:

.
.
.
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, SIGNAL
.
.
.
class CoordinatesConversor:
    """QGIS Plugin Implementation."""

    def __init__(self, iface):
.
.
.
        chkBox1 = self.dlg.checkBox
        chkBox1.connect(chkBox1, SIGNAL("stateChanged(int)"), self.change_status)
.
.
.
    def change_status(self):
        if self.dlg.checkBox.isChecked():
            self.dlg.checkBox.setText("Massive conversion activated")
            self.dlg.lineEdit.hide()
            self.dlg.lineEdit_2.hide() 
            self.dlg.lineEdit_3.hide() 

            self.dlg.lineEdit_4.hide() 
            self.dlg.lineEdit_5.hide() 
            self.dlg.lineEdit_6.hide() 
            
            self.dlg.comboBox.hide()
            self.dlg.comboBox_2.hide()

        else:
            self.dlg.checkBox.setText("Check to activate massive conversion")
            self.dlg.lineEdit.show()
            self.dlg.lineEdit_2.show() 
            self.dlg.lineEdit_3.show() 

            self.dlg.lineEdit_4.show() 
            self.dlg.lineEdit_5.show() 
            self.dlg.lineEdit_6.show() 
            
            self.dlg.comboBox.show()
            self.dlg.comboBox_2.show()
 
    def run(self):
.
.
.

cuyo resultado, al marcar la QCheckBox, corresponde a:

conversor3

Por otra parte, con propósitos de depuración del código también se puede usar la Python Consola. Esto se puede realizar con instrucciones print en el slot. De esa manera fue como primero probé la conexión antes de escribir el código definitivo; tal como se observa en la imagen a continuación:

conversor4

donde la secuencia de “Activado”, “Desactivado” y “Activado” en la Python Console revela que la conexión se lleva a cabo de la manera esperada para tres clicks consecutivos de la QCheckBox.

Nota: Para los que les parece un poco drástica la idea de “desaparecer” los Qt objects, también tienen la alternativa sugerida por Beñat en su comentario. A continuación, la implementación y visualización del resultado:

.
.
.
from PyQt4.QtCore import QSettings, QTranslator, qVersion, QCoreApplication, SIGNAL
.
.
.
class CoordinatesConversor:
    """QGIS Plugin Implementation."""

    def __init__(self, iface):
.
.
.
        chkBox1 = self.dlg.checkBox
        chkBox1.connect(chkBox1, SIGNAL("stateChanged(int)"), self.change_status)
.
.
.
    def change_status(self):
        if self.dlg.checkBox.isChecked():
            self.dlg.checkBox.setText("Massive conversion activated")
            self.dlg.lineEdit.setEnabled(False)
            self.dlg.lineEdit_2.setEnabled(False)
            self.dlg.lineEdit_3.setEnabled(False)

            self.dlg.lineEdit_4.setEnabled(False)
            self.dlg.lineEdit_5.setEnabled(False)
            self.dlg.lineEdit_6.setEnabled(False)
            
            self.dlg.comboBox.setEnabled(False)
            self.dlg.comboBox_2.setEnabled(False)
            
        else:
            self.dlg.checkBox.setText("Check to activate massive conversion")
            self.dlg.lineEdit.setEnabled(True)
            self.dlg.lineEdit_2.setEnabled(True) 
            self.dlg.lineEdit_3.setEnabled(True) 

            self.dlg.lineEdit_4.setEnabled(True) 
            self.dlg.lineEdit_5.setEnabled(True) 
            self.dlg.lineEdit_6.setEnabled(True) 
            
            self.dlg.comboBox.setEnabled(True)
            self.dlg.comboBox_2.setEnabled(True)
 
    def run(self):
.
.
.

Es obviamente más elegante.

conversor3

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

5 respuestas a Uso de las QCheckBox en un plugin de QGIS para convertir coordenadas

  1. Como sugerencia, en lugar de ocultar los lineedit, combox, etc., prueba a dejarlos visibles pero no habilitados, mediante [nombre_control].setEnabled(False).

  2. paumata dijo:

    Tengo una duda:
    En la universidad estamos usando QGIS para ver el terreno de un área determinada y otras cosas, en este caso me toco un estado de México, al abrir mi raster esta en coordenadas geográficas, estoy empezando a usarlo así que no se muy bien como moverle, ¿me podrías decir como puedo poner las coordenadas UTM en este caso?

    • Tienes que reproyectar el raster. En la Menu Bar: Raster ->Projections->Warp(Reproject). El Source SRS de tu raster debería ser EPSG 4326. El Target SRS el de la zona UTM que corresponda. Grabas con otro nombre para proteger la data original y desmarca la opción de cargar el resultado (porque te activa la reproyección al vuelo a la opción por defecto 4326). Cierras el proyecto y abres uno nuevo con el ráster reproyectado. Si lo hiciste bien debería verse similar al original pero con las coordenadas ahora proyectadas en metros.

  3. Pingback: Newsletter Octubre 2015 | El Blog de José Guerrero

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