Buscar este blog

domingo, 27 de marzo de 2016

Agregar layer virtual, nueva opción en Qgis 2.14 Essen

Agregar layer virtual, nueva opción en Qgis 2.14 Essen


En la nueva versión QGIS Essen se incorporan varias características nuevas, mejoras en el rendimiento, mayor cantidad de soporte para extensiones de datos, cambios en la interface, nuevas herramientas de digitalización, etc.

Un registro de cambios completo de las nuevas características de Qgis se encuentra en la página del proyecto  Registro de cambios versión 2.14 Essen


Entre estas nuevas características tenemos la inclusión de un nuevo botón en el panel de capas el cual se llama Agregar layer virtual (Add virtual layer), que nos permitirá crear tablas y capas a través de consultas SQL, incluso creando tablas dinámicas que se actualizan automáticamente al tiempo que se modifica la tabla a la que están vinculadas.

Ya teníamos la posibilidad de crear este tipo de capas y tablas previamente, pero solo podíamos hacer consultas a tablas que estaban dentro de una base de datos Postgres o Spatialite y haber creado la conexión de Qgis hacia la base de datos. Ahora tenemos disponible para todas las capas que tengamos cargadas en Qgis.


¿Cómo utilizar la nueva opción de layer virtual?

Tocamos sobre el botón de Add virtual layer... Se nos abrirá una ventana con un espacio en blanco grande que es el espacio para crear nuestra consulta. En la consulta le hacemos referencia a alguna de las tablas que ya tenemos cargada en el panel de capas, no es necesario mencionar el origen de datos o la base de datos de las capas.
Tenemos la opción de especificar el tipo de geometría que tendrá la tabla resultante si así lo requiere nuestra consulta. También podemos probar si la consulta que estamos creando es válida con el botón Probar
en la esquina inferior izquierda. Indicamos el nombre de la nueva capa en la barra superior. Por defecto es virtual_layer. Podemos hacer una consulta sencilla, en la que pidamos que la capa resultante sea igual a una de las que tenemos cargada en el panel de capas, pero que solo muestre los ciertas entidades con un valor especifico en alguno de sus campos. 

Para nuestro ejemplo hemos cargado una capa llamada calles. Y seleccionaremos solo las que formen parte de la carretera Panamericana.


Usamos esta consulta


select * from calles
where name = 'CARRETERA PANAMERICANA';

Nos crea esta capa virtual.




Esto da el mismo resultado que el hacer un query.

Vamos a desglozar la consulta para saber que significa cada una de sus partes:




Sin embargo lo útil de usar esta función es crear una tabla o capa que se actualice a la vez que modificamos la capa a la cual le hace referencia en el panel de capas, y poder usar funciones propias de SQL o del mismo Postgis para esas capas.

Cargaremos la capa de Edificaciones, que representan un conjunto de edificaciones del barrio de La Locería en Betania.



Vamos a realizar la siguiente consulta.

select tipo as Tipo,count(tipo) as Cantidad from Edificaciones

group by tipo
order by tipo;

Estamos ejecutando una función de agrupamiento, específicamente la de conteo. Solicitamos que en función de la capa Edificaciones nos cree una tabla con un campo que cuente cuantos elementos iguales tenemos en el campo tipo, le pedimos también que nos refleje otro campo que indique el nombre del valor que el campo de conteo indica la cantidad. La tabla queda de esta manera:



Como esta consulta está en función de nuestra capa Edificaciones esta se actualizará automáticamente cuando actualicemos la capa original.





Agregamos aquí un nuevo polígono y en el campo tipo asignamos el valor Comercial, aumenta entonces la cantidad de entidades de tipo Comercial.

Otro ejemplo, usaremos como ejemplo una consulta de Postgis, el comando para calcular el área ST_AREA. La consulta se la realizaremos nuevamente a nuestra capa de polígonos Edificaciones.

La consulta es:

select id as No_de_edificio, ST_AREA(geometry) as Metros from Edificaciones
order by id;





Nos genera la tabla siguiente con las medidas en metros de los polígonos de la entidad. Con la función ST_AREA podemos obtener la medida del área en las unidades del sistema de coordenadas de la capa, en este caso el SRC es UTM WGS84 Zona 17 N y las unidades son metros.

Con la función ST_AREA hacemos referencia a un campo geometry. En este caso nuestra entidad esta en un sistema de coordenadas cuya unidad es metros. Para calcular el área debemos pedir que saque la información de las coordenadas de cada una de las entidades de algún sitio. El campo geometry no exite en realidad a nuestra entidad, pero Postgis asigna el valor de las coordenadas en un campo que solo reconoce el mismo sistema de manera interna. Para las entidades cuyo sistema de coordenada está en metros el campo es geometry, si la entidad es de un sistema de coordenada en grados el campo es geography. Hay que tener cuidado cuando se trabaja con entidades geográficas, puesto que sus unidades son grados; si en el valor de la consulta hubieramos introducido 500 y el sistema de coordendadas de la capa hubiera sido geográfico, el buffer resultante habria sido de 500 grados.

Ahora crearemos una capa de buffer que se actualice automáticamente respecto a otra capa de puntos que representan torres de transmisión eléctrica. Según normas de salud, no debe haber poblados dentro de un rango de 500m alrededor de este tipo de estructuras, haremos pues un buffer de 500m para simular un análisis geográfico con estos elementos.

Tenemos nuestra capa de puntos Antenas



Al cargarla ejecutamos la consulta.

select id, st_buffer(geometry, 500) as Buffer from Antenas;

Le damos aceptar. Creará una capa de buffers de 500m alrededor de cada uno de los puntos.



Si desglozámos cada parte de la consulta, entendemos que:




Está nueva capa virtual de buffers está vinculada a la de puntos de las líneas de transmisión. Activamos la edición para la capa de torres de transmisión y creamos una nueva entidad. Detenemos la edición y salvamos los cambios.




Al hacer esto nos podemos dar cuenta que en el sitio donde creamos el nuevo punto se ha generado de manera automática el buffer de 500m.

Utilidad de los layer virtuales

Si necesitamos usar funciones de agrupamiento de SQL, o si queremos crear capas que cumplan ciertas condiciones y se actualicen de manera automática, el uso de los layers virtuales nos puede ayudar a ahorrar varios pasos extras que tendríamos que usar para realizar las mismas labores.
Como para crear los layers virtuales necesitamos ejecutar una consulta SQL es necesario conocer este lenguaje para usar sus funciones, y además si queremos usar funciones geográficas conocer Postgis.

Aquí hay un enlace a una página muy amena para aprender SQL:


y un enlace a la web oficial de Postgis: