Buscar este blog

Mostrando entradas con la etiqueta Sistemas de coordenadas. Mostrar todas las entradas
Mostrando entradas con la etiqueta Sistemas de coordenadas. Mostrar todas las entradas

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:

jueves, 17 de diciembre de 2015

Breve explicación sobre el manejo de sistemas de coordenadas en Qgis. Caso particular de Panamá convertir de WGS84 Zona 17 Norte (EPSG:32617) a NAD27 Zona 17 Norte (EPSG:26717) y viceversa

Breve explicación sobre el manejo de sistemas de coordenadas en Qgis. Caso particular de Panamá convertir de WGS84 Zona 17 Norte (EPSG:32617) a NAD27 Zona 17 Norte (EPSG:26717) y viceversa



En este pequeño tutorial explicativo, aprenderemos definiciones bastante básicas sobre lo que es un sistema de coordenadas, como manejarlo en  Qgis, transformar o reproyectar entidades entre distintos sistemas de coordenadas y el caso particular de reproyectar entre los sistemas de coordenadas UTM WGS84 y UTM NAD27 en Qgis. 

¿Qué es un sistema de coordenadas?


Un sistema de coordenadas es un sistema formado por un conjunto de elementos (ejes, datum, coodernadas, etc.) ordenados a lo largo de su extensión, puede ser usado para ubicar la posición de un objeto cualquiera que tenga valores correspondientes al mismo.

Podemos entender esta explicación mejor con un ejemplo, tenemos un conjunto de valores en un sistema, el cual tiene dos ejes el eje x y el eje y.





Ahora tenemos 3 objetos con valores que podemos corresponder en este sistema,

                        Objeto 1 y→10 , x→2
                        Objeto 2 y→ 5 , x→8
                        Objeto 3 y→11 , x →14

Nuestro sistema de coordenadas es la extension de esta malla, con ella podemos saber fácilmente cual seria la ubicación de nuestros objetos, dado que ellos tienen valor correspondiente en los ejes de nuestro sistema. En un sistema de coordenadas el conjunto de valores para ubicar un objeto se le llama coordenada

Podríamos ubicar nuestros objetos en las siguientes coordenadas de nuestro sistema




Hay muchos tipos de sistemas de coordenadas, y no necesariamente tienen que tener solo 2 ejes. Sistemas de coordenadas tridimensionales tienen tres ejes, y pueden tener más. Para que un objeto sea ubicado correctamente en el sistema, se le deben un valor por eje, o sea un coordenada.

Para nuestro caso nos interesan los sistemas de coordenadas concernientes al ámbito geográfico. Hay varios tipos sistemas de coordenadas geográficos, lo que comparten todos ellos es que tratan de representar la superficie del planeta y los objetos y fenómenos que se encuentran en ella. Hay muchos factores al considerar si hablamos sobre que parámetros conforman un sistema de coordenadas geográfico, que no tocaremos en esta entrada por ser términos matemáticos algo complejos. Por ahora nos enfocaremos en saber como tratar con los mismos en Qgis.



Sistemas de coordenadas en Qgis


Cuando cargamos una capa en Qgis el proyecto adquirirá por defecto el sistema de referencias de coordenadas (SRC) de esa primera capa cargada. Podemos observar el sistema de coordenada del proyecto en la esquina inferior izquierda y lo identificaríamos a través del código EPSG. Adicional a esto, si tenemos activada la proyección al vuelo lo veremos indicado entre paréntesis


Indicación del proyecto con el sistema de coordenadas WGS84 Zona 17 Norte, sin reproyección al vuelo



Indicación del proyecto con el sistema de coordenadas NAD27 Zona 17 Norte, sin reproyección al vuelo



Indicación del proyecto con el sistema de coordenadas WGS84 Zona 17 Norte, con la reproyección al vuelo activa



Indicación del proyecto con el sistema de coordenadas NAD27 Zona 17 Norte, con la reproyección al vuelo activa




Es preferible, pero opcional, que la opción de reproyección al vuelo este desactivada. Accedemos a esta opción a través de la pestaña Configuración→Opciones. Allí nos dirigimos a la pestaña SRC, y colocamos la opción No habilitar la reproyección “al vuelo”.















¿Por qué seleccionamos esta opción? La reproyección al vuelo es una opción que hace que todas las capas que tienen un sistema de coordenadas diferente, se comporten como si todas tuvieran el mismo sistema de coordenada que tiene el proyecto. La reproyección al vuelo es útil para fines visuales, como para elaborar un mapa y no tener que reproyectar todas las capas a un mismo SRC, pero no debe ser usado para fines de manipulación de datos, cada sistema de coordenadas tiene sus diferentes valores en precisión, desviaciones, medidas, etc., por ende lo más adecuado es manipular los datos cuando el sistema de coordenadas del proyecto y el de todas las capas presentes es el mismo. Se puede trabajar con la reproyección al vuelo, sí, pero no es lo óptimo. Cuando se instala Qgis,  el software tiene seleccionada por defecto la opción de Habilitar automáticamente la reproyección al vuelo si las capas tienen un SRC diferente, al tenerla activada si se carga una capa que tenga un sistema de coordenadas diferente al proyecto, este activa la reproyección al vuelo, haciendo que todas las capas se muestren en el sistema de coordenadas seleccionado para el proyecto. La otra opción Activar reproyección al vuelo por defecto hace que todas las capas se visualicen siempre en el sistema de coordenadas asignado al proyecto.

En la siguiente imagen podemos ver como se ven dos capas en el mismo proyecto cuando ambas tienen sistemas de coordenadas diferentes.
























El SRC del proyecto es WGS84 Zona 17 Norte (código EPSG:32617) igual que el de la capa Calles ilustrativas, que es una entidad tipo línea que representa la Carretera Interamericana en Panamá. La otra capa Base Panamá tiene el SRC WGS84 (código EPSG:4326), esta es una entidad tipo polígono que representa a Panamá y parte del territorio de Costa Rica y Colombia. Podemos ver en la imagen que el circulo rojo en la barra donde se indica el sistema de coordenadas dice que el sistema del proyecto es el 32617, sin reproyección al vuelo. Vemos la capa de Calles ilustrativas claramente en la imagen, la flecha roja indica el lugar donde esta la otra capa, la de Base Panamá. 

¿Por qué no la podemos ver? Puesto que en el SRC del proyecto WGS84 Zona 17 Norte, los valores de la capa Base Panamá se encuentran en ese lugar señalado con la flecha y los mismos corresponden a un espacio muy pequeño en el SRC del proyecto por eso no lo vemos.

Ahora procedemos a tocar la parte de la barra que indica el SRC del proyecto en la esquina inferior izquierda. Al tocarlo se nos habré la ventana de Propiedades del proyecto | SRC, como habíamos desactivado anteriormente la reproyección al vuelo por defecto, la casilla de Activar transformación de SRC al vuelo se encuentra desactivada. Para volver a activar la reproyección al vuelo solo hay que dar clic sobre ella.



Podemos ver el efecto en esta imagen




En esta imagen podemos ver que la capa de Base Panamá se ve sobrepuesta con la capa de calles, puesto que esta vez tenemos activada la reproyección al vuelo, causando que Base Panamá se vea como si su sistema de coordenadas fuera el del proyecto.

Se que este es un tema difícil de entender a cabalidad. Para poder hacerlo hay que documentarse mucho sobre geodesia y matematica euclidiana, pero para fines prácticos basta con comprender la funcion que tiene un sistema de coordenadas y como manejarse con ellos en el software. Si desean ahondar más en el tema pueden seguir estos links:
 Articulo en Wikipedia sobre los sistemas de coordenadas

 Instituto Nacional de Estadística y Geografía de México


¿Como podemos reproyectar el sistema de coordenadas de nuestras capas a otro?


Reproyectar en el ámbito SIG es la acción de cambiar la proyección o el sistema de coordenadas de una entidad en otro, normalmente creando una capa igual pero correspondiente al sistema de coordenadas deseado. En Qgis esta acción la realizamos de manera simple con el comando Guardar como… dando clic derecho sobre cualquier capa, nos saldrá la ventana de guardar capa. En ella podemos seleccionar el formato de nuestro nuevo archivo a guardar, su ubicación y lo que nos concierne el sistema de coordenadas que se elige en la barra SRC de la capa.





















Reproyectando la capa de Base Panamá al SRC WGS84 Zona 17 Norte, creamos otra nueva capa que nombramos Base Panamá 32617 para distinguirla.























Podemos observar que sin tener la reproyección al vuelo activa las capas concuerdan, pues esta nueva capa Base Panamá 32617 esta en el mismo sistema de coordenadas que el proyecto y la otra capa.


Caso particular de reproyección para Panamá y Centro América. Pasar de WGS84 Zona 17 Norte (EPSG:32617) a NAD27 Zona 17 Norte (EPSG:26717)


Hasta ahora hemos aprendido que con el comando Guardar como... podemos reproyectar nuestras entidades a otro SRC diferente. En el caso particular de Panamá (y de gran parte de Centroamérica), ocurre una situación especial al momento de reproyectar entidades desde el los sistemas de coordenadas NAD27 en UTM y WGS84 en UTM. En situaciones normales un objeto reproyectado entre estos sistemas de coordenadas tiene una diferencia de ± 200m al norte y de ± 20m en el este. Si transformáramos un objeto de NAD27 hacia WGS84 la entidad resultante debería estar aproximadamente 200m mas al norte y 20m mas al este que la entidad original, si se reproyecta desde WGS84 hacia NAD27 la entidad resultante debería estar aproximadamente 200m mas al sur y 20m mas al oeste.


Sin embargo, cuando realizamos esta operación en Qgis, ocurre una situación curiosa.

En la imagen tenemos un punto original en NAD27, lo reproyectaremos a WGS84. Al medir la distancia entre ambos puntos da como resutado ±58 metros.

Así es, el resultado no son los valores esperados al norte, ni tampoco lo son al este.

¿Por qué ocurre esto? Qgis para reproyectar datos usa una transformacional directa entre los valores de los sistemas de coordenadas y por ello omite muchos datos, entre estos omite los valores de cambio entre sistemas de coordenadas con datums diferentes. El datum geográfico, es una figura matematica que en un sistema de coordenadas se usa para representar la superficie de la Tierra y a través de ella podemos relacionar un valor en el datum con un objeto real en la Tierra, en nuestra primera imagen de ejemplo, nuestro datum seria la malla de celdas, por dar un ejemplo. No todos los datums tienen la misma imagen matematica de la Tierra, en el caso de NAD27 se asume que el centro de gravedad de la Tierra se encuentra en un punto bastante más al Norte que para el caso de WGS84, esta diferencia afecta el resultado final de la reproyección. 

Esta transformación directa entre SRC es óptima para objetos ubicados en muy altas o bajas latitudes, pero no para los ubicados en partes medias de la Tierra, como es el caso de Panamá y Centroamérica. En este caso se nos presenta un problema en la exactitud de la reproyección en el software. Afortunadamente Qgis es un programa muy versátil y nos permite crear nuestros propios sistemas de coordenadas personalizados.

Procederemos a crear un sistema de coordenadas equivalente al NAD27, pero que tenga la orden de que al momento de reproyectar entre estos sistemas de coordenadas tome en cuenta otros parámetros que son los adecuados para la transformación entre sistemas de coordenadas con diferentes datums, en este caso usaremos como ejemplo el WGS84 Zona 17 Norte y el NAD27 Zona 17 Norte. Como resultados las nuevas entidades reproyectadas entran una diferencia de ± 200m al Norte y de ± 20m al Este.



Creando un sistema de coordenadas personalizado en Qgis


Nos vamos a la pestaña de Configuración->SRC personalizado... Se nos abrirá la ventana de Definición de sistema de coordenadas personalizado

























Tocamos el símbolo de verde para agregar un nuevo espacio que sera de nuestro sistema de coordenadas nuevo.


En la parte de abajo hay que especificar un nombre para el nuevo sistema de coordenadas, le colocamos uno a nuestro gusto.
Sigue el recuadro de parámetros del sistema de coordenadas. Estos parámetros deben equivalentes al NAD27 Zona 17 Norte, para tener los mismos copiamos el sistema de coordenadas NAD27 con el botón de Copiar SRC existente que esta a la derecha.


Al tocarlo se desplegaran los sistemas de coordenadas disponibles por defecto, buscamos el NAD27 Zona 17 Norte (código EPSG:26717), lo tocamos y le damos aceptar.
De vuelta a la ventana de Definición de sistema de coordenadas personalizado veremos que en el recuadro de Parámetros ahora tenemos valores, estos son equivalentes a los del SRC NAD27 Zona 17 Norte.



Ahora, en el espacio después de donde se especifica la zona, vamos a agregar estos valores:

+ellps=clrk66 +towgs84=0,125,201,0,0,0

A la vez eliminamos el valor +datum=NAD27

¿Qué son estos valores que introducimos? El primer introducido especifica que el elipsoide a usarse en la transformación es el elipsoide de Clarke 1966, valor que reemplaza el +datum=NAD27.
Los demás
 valores son los parámetros de trasformación que debe tomar el programa al momento de transformar de un SRC a otro. Los tres primeros valores son los cambios en el eje de las x, eje de las y, y eje z.
Estos valores fueron obtenidos de la siguiente fuente

De la National Geoespatial-Intelligence Agency, de los Estados Unidos






Ahora le cambiamos el sistema de coordenadas seleccionado a nuestra capa, nos vamos a la pestaña de Propiedades de la capa→ General y allí buscamos Sistema de referencia de coordenadas y escogemos nuestro sistema de coordenadas recién creado













Usamos ahora la opción Guardar como… para reproyectarla, seleccionando que la queremos reproyectar a WGS84 Zona 17 Norte







Procedemos a medir la nueva entidad

















Ahora si tenemos valores adecuados en nuestra entidad reproyectada.


Un comentario final


Qgis es un software muy versátil, de manera practica podemos crear estos sistemas de coordenadas definidos. Lo complejo del asunto es poder comprender como funcionan los elementos que conforman los sistemas de coordenadas y las transformaciones. Esta entrada ha sido bastante extensa, pero en realidad no hemos podido ahondar en gran manera en muchos de los temas. Hemos definido de una forma bastante burda lo que son los sistemas de coordenadas, parámetros de transformación, los elementos que los conforman... Estos son temas mucho más robustos de lo que podíamos explicar aquí para evitar hacer el instructivo aun mas grande.

Esperamos que en próximas entradas podamos explicar cada uno de los temas individualmente y de una forma amigable. Y sobre todo que pueda ser de beneficio para los usuarios.