Cambiando el color de una capa en PyQGIS

Todo vector cargado a través de PyQGIS es representado usando un símbolo simple y un color al azar. Ese color puede ser cambiado modificando los atributos del símbolo.
Para cambiar el color de una capa existen algunos métodos que explicaremos en este infohatari, por lo que estamos seguros que al finalizarlo podrás:

A.    Conocer las clases y métodos que faciliten el cambio del atributo color en una capa vectorial
B.    Entender el proceso que sigue el software para ejecutar las órdenes emitidas a través de la consola de PyQGIS, y conseguir el cambio de color.
C.    Solucionar problemas relacionados a la no actualización del cambio de color en el lienzo.

Empecemos:

Para comenzar es necesario que descargues y descomprimas el archivo pyqgis_2.zip en la carpeta que hemos venido trabajando en los infohatari previos.

1.    Cargamos el archivo vectorial Upslope_Area_cuenca.shp de la misma forma en que los cargamos en el infohatari previo, con lo que obtendremos el siguiente resultado en el lienzo:

2.    Ahora empezaremos a ingresar los comandos que ejecuten los cambios de color en el relleno del polígono. Esto lo haremos a través de la ventana de ingreso de comando y no a través de scripts, debido a que aún no hemos explicado el uso de POO (Programación Orientada a Objetos) en PyQGIS, lo cual será el motivo de nuestro próximo infohatari, debido a que la programación en PyQGIS se basa en este paradigma de la programación.

2.1.    El primer método que veremos será el del uso de la clase QColor, la que usa diferentes formas, como veremos a continuación:

A continuación explicamos las líneas de comando ejecutadas:

  • En primer lugar, hemos importado las clases y métodos de la biblioteca central de QGIS, la qgis.core; así como también hemos importado la clase QColor de la biblioteca QtGui para poder llevar a cabo el cambio de color; así mismo hemos importado el objeto iface que viene a ser una instancia de QgsInterface y nos permite acceder al lienzo del mapa, menú, barra de herramientas, y otras partas del ambiente de QGIS.
  • Con esto, hemos empezado a ejecutar los comandos necesarios para llevar a cambio de color, especificando lo siguiente:
  • Para poder cambiar el color necesitamos tener acceso al motor de representación de la capa, el cuál es denominado V2; y esto lo hemos conseguido asignándolo a la variable renderer los atributos del motor de representación V2 de nuestra capa cargada Area_de_Cuenca, en la línea 6.
  • Seguidamente accedemos al símbolo, tal como se observa en la línea 7.
  • Y gracias a que hemos importado la clase QColor, podemos usar el método setColor(), tal como se aprecia en la línea 8, en el que especificamos el color de interés en la escala RGB según la notación hexadecimal .
  • El cambio de color no se realizará inmediatamente, debido a que el lienzo debe ser actualizado, y esto se logra, en teoría, con el siguiente comando:

>>> iface.mapCanvas().refresh()

Sin embargo, al ingresar este comando en la línea 9, no siempre es factible la actualización, y esto puede deberse a que se ha ejecutado el almacenamiento en caché para acelerar el redibujado del mapa (Sherman, 2014). Podemos entender de lo explicado que la orden se almacena en caché pero no se ejecuta y por lo tanto no se actualiza el lienzo. Por este motivo es necesario invalidar el caché antes de actualizar, y para ello hemos utilizado el método .setCacheImage(None), tal como se muestra en la línea 9.

El resultado de las órdenes ejecutas debe ser tal como se muestra en la siguiente figura:

2.2.    Otra de las formas en que la clase QColor es útil para cambiar el atributo color de la capa, es variando la línea de comando 9 en una de las siguientes formas:

symbol.setColor(QColor(‘red’))
symbol.setColor(QColor(255, 0, 0, 255))

  • Esta última forma es de especial interés cuando se quiere manejar la transparencia del atributo, ya que incluye un valor para el alfacanal.

Cabe señalar que existen 20 colores predefinidos (Nokia, 2010) que son accesibles por nombre, como es el caso de los colores:

2.3.    El segundo método que veremos será el del uso de la clase Qt, como veremos a continuación:

A continuación explicamos las líneas de comando ejecutadas:

  • A diferencia de los comandos ejecutados en el ítem 2.1., aquí añadimos el comando en la línea 5, el cuál importa la clase Qt desde la biblioteca central de Qt, que como hemos explicado en el anterior infohatari es la biblioteca para el desarrollo de la interfaz gráfica de usuario a través de los vínculos que le ofrecen PyQt y SIP.
  • Seguidamente, ejecutamos la clase Qt tal como se puede ver en la línea de comando 9.

El resultado de las órdenes ejecutas debe ser tal como se muestra en la siguiente figura:

Por último, ya te habrás percatado que el color del ícono de la capa en la leyenda no ha cambiado aun cuando hayas ejecutado varios cambios de color, esto se debe a que necesitas ejecutar una última línea de comando que incluya la clase iface, la misma que fue importada desde qgis.utils, como sigue:

>>> iface.legendInterface().refreshLayerSymbology(cuenca)


Referencias

  • Nokia. (2010). Qt Reference Documentation. Obtenido de http://doc.qt.digia.com/qt-maemo/qcolor.html
  • Sherman, G. (2014). The PyQGIS Programmer's Guide: Extending QGIS 2.x with Python. Chugiak, AK, USA, 99567-1897: Locate Press LLC. Obtenido de https://locatepress.com/ppg

 

Suscríbete a nuestro boletín electrónico

Suscríbase a nuestro boletín gratuito para recibir noticias, datos interesantes y fechas de nuestros cursos en recursos hídricos.

 

Posted on May 28, 2015 and filed under TutorialPython, TutorialQGIS.