lunes, 21 de diciembre de 2020

Cómo obtener la proyección a partir de la Status Bar de QGIS 3 mediante PyQGIS?

La proyección es un elemento importante a la hora de producir capas vectoriales o ráster porque hará que estas se desplieguen de la manera adecuada desde un punto de vista geográfico. Cuando se abre QGIS, con capas o sin ellas, en la Status Bar se observa la proyección con código EPSG en la parte inferior derecha. La Status Bar en QGIS 3 (PyQt5.QtWidgets.QStatusBar) es un objeto de la ventana principal (PyQt5.QtWidgets.QMainWindow) que se obtiene a partir de los métodos 'mainWindow()' y 'statusBar()' de las clases QgisInterface y PyQt5.QtWidgets.QMainWindow respectivamente

La serie de comandos siguiente, ejecutados en la Python Console de QGIS, permitirá definir y acceder a los metodos de la clase correspondiente a la Status Bar.

>>>statusBar = iface.mainWindow().statusBar()
>>>statusBar
<PyQt5.QtWidgets.QStatusBar object at 0x7f2ff0729a68>

El objeto del tipo QStatusBar presenta el método 'children' que permite producir una lista con todos los elementos involucrados; tal como se observa a continuación.

>>>elements = statusBar.children()
>>>elements
[<PyQt5.QtWidgets.QSizeGrip object at 0x7fe3e56f6ca8>, <PyQt5.QtWidgets.QWidget object at 0x7fe3e56f6d38>, <PyQt5.QtWidgets.QHBoxLayout object at 0x7fe3e56f6dc8>]

El segundo elemento (elements[1]) es del tipo QWidgets el cual también presenta el método 'children' y contiene a su vez los items de la Status Bar. El décimo de ellos corresponde a un objeto del tipo QToolButton que incluye el código EPSG requerido.

>>>elements[1].children()
[<PyQt5.QtWidgets.QHBoxLayout object at 0x7fe3e56ff9d8>, <PyQt5.QtWidgets.QLineEdit object at 0x7fe3e56ffa68>, <PyQt5.QtWidgets.QProgressBar object at 0x7fe3e56ffaf8>, <PyQt5.QtWidgets.QToolButton object at 0x7fe3e56ffb88>, <PyQt5.QtWidgets.QWidget object at 0x7fe3e56ffc18>, <PyQt5.QtWidgets.QWidget object at 0x7fe3e56ffca8>, <PyQt5.QtWidgets.QWidget object at 0x7fe3e56ffd38>, <PyQt5.QtWidgets.QLabel object at 0x7fe3e56ffdc8>, <qgis._gui.QgsDoubleSpinBox object at 0x7fe3e56ffe58>, <PyQt5.QtWidgets.QCheckBox object at 0x7fe3e56ffee8>, <PyQt5.QtWidgets.QToolButton object at 0x7fe3e56fff78>, <PyQt5.QtWidgets.QToolButton object at 0x7fe3e5700048>, <PyQt5.QtWidgets.QWidget object at 0x7fe3e57000d8>]
>>>elements[1].children()[10]
<PyQt5.QtWidgets.QToolButton object at 0x7fe3e56fff78>
>>>elements[1].children()[10].text()
'EPSG:4326'

La importancia de acceder a este código en la Status Bar radica en que no hace falta la referencia a las capas cargadas en el Map Canvas o en la Map Legend sino que directamente accedemos al CRS del proyecto por default. En el próximo post se visualizará la utilidad de este hecho.

No hay comentarios: