Visor de Shapefiles con QGIS, Python y Qt en GNU/Debian

Hace algún tiempo, intenté reproducir el procedimiento para desarrollar un visor de shapefiles, como una aplicación independiente de escritorio, usando QGIS, Python y Qt en GNU/Debian; con base en un artículo publicado en GeoTux. Sin embargo, en esa época no fue posible porque el motor de simbología en QGIS había cambiado (causa principal) y la ruta a las imágenes para las botoneras en GNU/Debian es diferente a la del Ubuntu usado para las pruebas de ese artículo (algo muy sencillo de resolver).

Como parece estar de moda la programación para QGIS debido a la salida reciente de la versión 2.0.1 Dufour, para la cual comienza a aparecer bibliografía importante al respecto como la del propio creador de QGIS (Gary Sherman) y Anita Graser, volví nuevamente al artículo de GeoTux buscando ejemplos de aplicación a través del manual del PyQGIS Cookbook. Como ya sé un poco de que va esto, me detuve a analizar lo del motor de simbología y con base a lo que ya había sido contestado en los comentarios del artículo por Taurfer decidí sustituir toda esta porción del código:

        .
        .
        .
        #Cambiar el color del layer
        symbols = layer.renderer().symbols()
        symbol = symbols[0] 
        symbol.setFillColor(QColor.fromRgb(176,251,163))            
        .
        .
        .

por esta otra:

        .
        .
        .
        #Cambiar el color del layer
        rendererV2 = layer.rendererV2()
        symbols = layer.rendererV2().symbols()
        symbol = symbols[0]
        symbol.setColor(QColor.fromRgb(100,100,163))
        symbol.setAlpha(0.7)
        .
        .
        .

y funcionó. Como las botoneras estaban “vacias” entonces ubiqué las imágenes en la red y las grabé, como superusuario, en la ruta /usr/share/qgis/themes/classic/ (que tuve que crear con mkdir porque en Debian no existe). El resultado, cuando ejecuté el programa (en el directorio Visor_Shapefiles) con python VisorShapefiles2.py, fue el siguiente:

visor

El código completo se encuentra disponible aquí:

Visor_Shapefiles.zip

Corresponde al directorio Visor_Shapefiles que a su vez contiene el directorio shapefiles; donde está incluido annual_precipitation3.shp (hacia el cual se navega de manera interactiva para cargarlo cuando se hace click en la botonera correspondiente). Los otros dos archivos son VisorShapefiles2.py y visor_shapefiles_ui.py (el archivo visor_shapefiles_ui.pyc se genera después de la ejecución del código).

Nota: Aquí dejo una versión que corre sin problema en cualquier Ubuntu y Debian, sin necesidad de grabar las imágenes en la ruta señalada, porque las coloqué en una carpeta oculta (.Icons) en el interior de Visor_Shapefiles2. El archivo comprimido es:

Visor_Shapefiles2

Esta entrada fue publicada en Código Python, QGIS, SIG, Software Libre. Guarda el enlace permanente.

5 respuestas a Visor de Shapefiles con QGIS, Python y Qt en GNU/Debian

  1. taurfer dijo:

    Enhorabuena por el logro y enhorabuena por el blog. Es muy interesante. De todas maneras, se parece tanto tu nueva porción de código al comentario que yo añadí hace tiempo en http://geotux.tuxfamily.org/index.php/es/component/k2/item/199-construccion-de-un-visor-de-shapefiles-con-herramientas-libres-qgis-python-y-qt.html, que creo que me merezco un pequeño crédito, ¿no?
    Saludos,
    taurfer

    • Gracias por el comentario pero cuando señalo “… y con base a lo que ya había sido contestado en los comentarios del artículo … ” es una clara alusión a ti. No fue explícita en ese momento, deliberadamente, por 3 razones:

      1. Tu tampoco mencionas de donde sacaste la solución (dices que la “buceaste” por allí).
      2. No señalas explícitamente donde se debe llevar a cabo la misma.
      3. La identación if … else es incorrecta y haría pasar algo de trabajo a los poco experimentados; amén de que es innecesaria en este caso.

      No obstante, ya tienes los créditos correspondientes porque verdaderamente fue lo que me sacó del apuro.

      Saludos

      • Taurfer dijo:

        Buenas,

        Gracias por el crédito. Aprovecho para añadir alguna aclaración más sobre tus puntos, con el ánimo de matizarlos. Sin más.

        1) El código que puse en geoTux era una adaptación mía entre el propio código de Germán Carrillo en su entrada y la explicación que aparecía en https://qgis.readthedocs.org/en/latest/docs/pyqgis_developer_cookbook/03_vector.html#appearance-symbology-of-vector-layers
        Ahí se decía que la forma de simbolizar había cambiado a partir de la versión 1.4 de QGIS y es por eso la inclusión de la línea “if layer.isUsingRendererV2():”

        2) Seguramente esté equivocado, pero pensaba que era evidente que esas líneas iban justo después de “#Cambiar el color del layer” del método AddLayer, ya que esa era precisamente mi pregunta anterior y que aparece específicamente en el blog de GeoTux.

        3) Tienes razón que al pegar el código en GeoTux perdió la identación y eso podía conducir a error a personas menos familiarizadas con la sintaxis de Python. Error mío. Sin embargo, arreglado eso, todas las líneas sí eran correctas al menos cuando yo las ejecuté bajo QGIS 1.8. Desconozco si eso ya no funciona en QGIS 2.0, donde es posible que lo hayas probado tú, y porque haya instrucciones que ya no estan soportadas bajo esta nueva versión. Aún no lo tengo instalado.

        Saludos y gracias nuevamente por tus comentarios y las entradas de tu blog. Son muy interesantes.
        Taurfer

  2. Tienes razón. Estaba tan apurado en resolver el problema que ni siquiera leí adecuadamente tu post anterior a aquel en donde planteaste la solución definitiva. Allí se esbozaba donde iba y yo lo veía, no se por qué, como si era tu firma en el foro (por lo del guión largo). En los comentarios y en los post estoy acostumbrado a añadir líneas de código en bloques encerrados con “code” que ni siquiera le hacía caso.

    Saludos

  3. Pingback: Visor de Capas (Shapefiles y Ráster) con QGIS, Python y Qt en Windows 7 | 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