jump to navigation

Una breve introducción a la programación de QGIS 17.7.15

Posted by Migsar in Computación, GIS, Tecnología.
Tags: , , , , , , , , , , ,
trackback

A continuación explico de manera breve los aspectos básicos de programación de QGIS. Es un error creer que se tiene que entender todo a la primera. La mayoría de los conceptos se verán a profundidad gradualmente al ser necesarios para el desarrollo de plugins, sin embargo, es bueno tener un panorama general que sirva como marco de referencia para los nuevos conocimientos.

QGIS

QGIS es un programa pensado para computadoras de escritorio que permite utilizar Sistemas de Información Geográfica, desde la visualización hasta la creación, edición y el posterior procesamiento o análisis. Es compatible con los formatos de otros programas comerciales y puede trabajar tanto con datos raster (imágenes) como con datos vectoriales.

C++

Es un lenguaje compilado, es el lenguaje en el que QGIS está escrito. Por ser compilado se necesita una versión diferente del programa o plugin para distintos tipos de computadora. Además, es mucho menos amigable que Python para los programadores principiantes. La interfaz gráfica de QGIS se hizo en C++ mediante una librería llamada Qt que se distribuye de manera libre, esta librería tiene una serie de componentes visuales que permiten crear programas, éstos van desde las distintas ventanas y cuadros de diálogo hasta las áreas para imágenes y botones. Es posible agregar plugins a QGIS escritos en C++, lamentablemente no se trata del lenguaje de programación más popular porque tiene una forma de escribir estricta y a veces complicada. Afortunadamente existe una capa en Python que permite utilizar los componentes de la interfaz gráfica sin programar en C++, ocultando las funciones originales con funciones de Python.

Python

Es un lenguaje de programación interpretado, es decir, el programa que lo interpreta (entiende) es diferente para cada plataforma pero los programas escritos en Python son exactamente iguales en todas las computadoras, lo que es una ventaja al escribir y compartir código. Es el lenguaje preferido en el ámbito científico porque es bastante flexible, con una estructura amigable y con manejo incluido de números complejos. QGIS tiene una interfaz en Python desde la que es posible controlar prácticamente todos los aspectos de la aplicación. Lleva tiempo conocer la estructura de objetos que la compone (en la próxima sección se habla al respecto) y pienso que esto es una de las barreras más comunes que enfrentan los usuarios que quieren empezar a utilizar la parte programática de QGIS, pues incluso es difícil empezar a buscar la información en la documentación referente a los distintos componentes.

Programación Orientada a Objetos

Existen libros en donde está muy bien explicada la programación orientada a objetos (recomendar uno) pero se tratará aquí de manera muy superficial para ubicarnos en el contexto necesario para empezar a programar plugins de QGIS. Generalmente se aborda el problema programando con clases y objetos reales y simulando su comportamiento y características, no obstante, creo que así es difícil percibir como se relaciona con un programa de cómputo. Es necesario empezar con ese ejemplo, pero no dejarlo ahí sino aterrizarlo en nuestra materia.

Primero los conceptos, existen tres que me parecen indispensables: objeto, propiedad y método. Existen otros conceptos que son básicos en un tratamiento computacional riguroso, pero que no mencionaremos aquí hasta que sean necesarios. La programación se trata de abstraer la realidad y general modelos, que consideran sólo las características que nos interesan.

Objeto

Si se considera de manera abstracta (indefinida, en el sentido del artículo indefinido en el lenguaje) se llama clase. Las clases representan componentes u objetos, por ejemplo, manzanas, patos, coches, plumas, etc. Estos objetos en el mundo real tienen ciertas características, como el sabor, color o funcionamiento. Es necesario incluirlas en nuestro modelo, aunque hay que tener cuidado de no incluir las características que complicarían innecesariamente el análisis. Las características se dividen en propiedades y métodos, la división es muy tenue y suele depender de los criterios del programador aunque existen ciertos parámetros considerados universales en la decisión.

Propiedad

Se refiere a características pasivas e inmutables por sí mismas. Por ejemplo, el color o el sabor de una manzana, el color o el tamaño de un pato o la velocidad máxima de un coche. En general se trata de datos descriptivos del objeto.

Método

Se refiere a posibilidades de acción o cambio, es decir, características activas. La manzana no tiene ninguna característica de este tipo a diferencia del pato, que puede hacer ruido, caminar, volar o nadar, si es hembra puede poner huevos, etc. El coche puede arrancar, detenerse, acelerar, frenar, abrir las puertas, la cajuela, cambiar de velocidad, etc. En general se trata de funciones, es decir, modificadores de los datos del objeto.

Algunas reflexiones sobre los objetos

Las definiciones anteriores quedarán claras con el uso y es importante saber que en programación siempre hay más de una forma de hacer las cosas, no existen formas incorrectas en términos generales sino que dependiendo del contexto hay formas que ofrecen ventajas sobre otras. Lo que para una persona puede parecer una función para otra puede parecer un dato, por ejemplo, con el pato, uno puede pensar que tiene tres métodos de desplazamiento: caminar, nadar y volar; alguien más puede decir que solo existe un método, desplazar y que el tipo de desplazamiento es una propiedad que puede tomar los valores caminar, nadar o volar. Las dos formas son válidas y la correcta dependerá del procesamiento que se necesite después, quizá solo es importante saber el estudio de las rutas migratorias y no importa el tipo de desplazamiento sino el origen y destino, por lo que resulta complicado escribir tres métodos y es necesario saber la posición espacial del pato, sin embargo, puede ser que se esté estudiando el metabolismo del pato y su consumo calórico diario, en este caso se requeriría una propiedad adicional que se refiera a la energía del pato pero además, no importa ni el origen ni el destino sino el tiempo que el pato pasa desplazándose y el consumo energético relacionado a cada forma por lo que tres métodos separados se vuelven la mejor alternativa. Pueden existir objetos sin propiedades ni métodos pero su utilidad es bastante limitada (o nula).

Ahora daremos un salto a lo abstracto, objetos propiedades y métodos en los programas de computadora. En esencia se trata de lo mismo, la ventana del programa es nuestro objeto padre (o madre) y tiene propiedades, como el tamaño horizontal y el tamaño vertical y métodos, como crear, cerrar, minimizar o detectar si el usuario hace click o mueve el mouse sobre ella. Las cosas se complican un poco si tenemos muchos botones como sucede en cualquier programa moderno, además de la pantalla de captura o visualización y los menús desplegables. Una forma de abordar el problema sería crear muchas funciones para cada uno de los elementos, pero rápidamente nos cansaremos de repetir código y veremos que surgen muchas generalidades, todos los botones se comportan de un modo similar, pueden parecer ligeramente presionados cuando el mouse está sobre ellos y completamente presionados cuando se les hace click, además, se trata de objetos dentro del objeto principal. Lo más fácil es decir que el objeto ventana contiene otros objetos más pequeños, cada uno con métodos y propiedades propios, una forma de representar esto es mediante una estructura de árbol invertida en la que la ventana principal está hasta arriba y los objetos descienden jerárquicamente, pues así como los botones son objetos también lo son los menús y las barras de herramientas; los primeros contienen opciones que pueden ser seleccionadas y las segundas contienen íconos que representan acciones.

APIs

Se conoce como API al conjunto de objetos disponibles para interactuar con una aplicación o biblioteca, el término significa Application Programming Interface, es decir, Interfaz de Programación de la Aplicación. El API es un término muy importante y con el que hay que familiarizarse pues es lo que se busca siempre que se quiere empezar a programar con alguna aplicación o librería en particular. En el caso de QGIS nos tendremos que familiarizar con dos APIs, uno para la parte visual y otro para el procesamiento de datos correspondiente a los sistemas de información geográfica.

Qt

Se mencionó anteriormente que Qt es una biblioteca de componentes (es común aunque semánticamente incorrecto llamar librería a la biblioteca por la similitud con library en inglés, yo uso intercambiablemente los dos términos y no me parece grave hacerlo siempre que se tenga claro el concepto de programación asociado). Se utilizará la documentación de Qt para todo lo que tenga que ver con la interfaz gráfica de QGIS, ya que los componentes no son particulares de QGIS sino generales a cualquier programa que use Qt.

La documentación se encuentra en:

http://doc.qt.io/qt-4.8/

Casi al final de la página aparece Qt API.

QGIS

El API de QGIS hace referencia a las funciones de C++, sin embargo, es accesible desde Python mediante el objeto iface, que se refiere a la interfaz de QGIS disponible para los plugins. Su documentación se encuentra en:

http://qgis.org/api/2.8/index.html

En ambos casos la documentación puede parecer abrumadora al inicio pero con el uso se irá aclarando.

Anuncios

Comentarios»

No comments yet — be the first.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

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

Google+ photo

Estás comentando usando tu cuenta de Google+. 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 )

Conectando a %s

A %d blogueros les gusta esto: