2 years ago 1 views

Uso SIG QGIS para gestión de datos geográficos

Índice

Introducción

Caso de uso: Análisis multitemporal con imágenes raster

Manejo de fuentes Colombia en mapas

Fuente: https://www.colombiaenmapas.gov.co

Guía para georreferenciar imágenes RASTER:

Caso de uso: Agregar capas de catastro del IGAC

IGAC tiene los datos en ESRI sobre un servicio REST

Caso de uso: Agregar imágenes de Maxar Premium

Fuentes:

Maxar es una capa de imágenes satelitales de buena resolución de tipo XYZ

Según una de las fuentes, necesitamos:

Parece que no hay acceso a una api key gratuita para usarla

Casos de uso con importación de datos abiertos:

Para este ejercicio usamos dos conjuntos de datos:

Convertir puntos a polígonos

Teníamos una base de datos en hoja de cálculo con 89 puntos georreferenciados. La importamos a QGIS como .csv y luego aplicamos el siguiente proceso para convertirla a polígono.

captura de pantalla QGIS

captura de pantalla QGIS

Importar un archivo .csv con georreferenciación de grados, minutos y segundos a coordenadas decimales.

Descargamos los datos de Distritos de riego activos del portal de Datos Abiertos del Estado colombiano y a partir de este archivo en .csv requeríamos convertir sus campos de latitud y longitud a coordenadas decimales.

Para ello hicimos lo siguiente:

Importar capa .csv

Dado que los datos vienen en el formato GMS (Grados, Minutos y Segudos),
por ejemplo,“5° 19.566’ N”, y también algunos campos dicen “SIN INFORMACIÓN”. Por ello para este caso elegimos la opción “Coordenadas GMS”. Damos aceptar y tenemos importada nuestra capa.

Todos los objetos quedan georreferenciados con excepción de los que tenían “SIN INFORMACIÓN” en las coordenadas

Menu d adminstración de fuentes de datos

Así se ve al importar la tabla de atributos

captura QGIS tabla atributos .csv se muestra campo latitud/longitud

Y así se ve la capa de puntos importada:

mapa en QGIS con fondo OSM y la capa de puntos en amarillo sobre ella

Convertir un archivo PDF de tabla de datos a un archivo .shp

En este caso necesitábamos extraer una tabla de coordenadas de este documento:

https://cvs.gov.co/web/wp-content/docs/docinteres/Doc_Tec_Sustraccion_DRMI.pdf

Preparación de los datos

Extraer la tabla de datos del archivo PDF utilizando una herramienta de extracción de PDF como Tabula o PDFTables.

Tabula:
java -jar tabula.jar -p <número de página> -o <nombre de archivo de salida>.csv <nombre de archivo de entrada>.pdf

PDFTables: utilizar la interfaz web para cargar y extraer la tabla de datos

Normalizar los datos en el archivo .csv

Cambiar los separadores decimales de comas a puntos utilizando el comando sed:
sed -i 's/,/./g' <nombre de archivo de entrada>.csv

Eliminar los interlineados en blanco entre cada línea de datos utilizando el comando sed: sed -i '/^$/d' <nombre de archivo de entrada>.csv

Encerrar entre comillas cada campo individual dentro de los campos “Este” y “Norte” utilizando el comando sed:
sed -i 's/\("[^,"]*\),\([^"]*"\)/\1;\2/g' <nombre de archivo de entrada>.csv

ambiar los separadores decimales de puntos a comas dentro de cada registro individual dentro de los campos “Este” y “Norte” utilizando el comando sed: sed -i 's/\([0-9]\)\.\([0-9]\)/\1,\2/g' <nombre de archivo de entrada>.csv

Ajustes adicionales

La tabla de datos estaba distribuida en 3 columnas, por tanto, una vez normalizados, usamos Libreoffice para mover las dos columnas adicionales a continuación de la primera columna aprovechando que todos los puntos estaban numerados consecutivamente. Esto también se puede hacer con línea de comandos o scripts en otros lenguajes.

Python

En Python se puede utilizar la biblioteca pandas para leer y manipular archivos CSV. Para mover las columnas adicionales y concatenarlas con la primera columna se puede utilizar el siguiente código:

Este script puede contener errores!

import pandas as pd df = pd.read_csv('datos.csv') df[['Este', 'Norte']] = df[['Este', 'Norte']].apply(lambda x: x.str.replace(',', '.')) df = df[['Punto', 'Este', 'Norte']] df.to_csv('datos_nuevos.csv', index=False)

Este código lee el archivo datos.csv y lo carga en un objeto DataFrame de pandas. Luego se aplica una función lambda a las columnas Este y Norte, que reemplaza todas las comas por puntos. Después se reorganiza el orden de las columnas para que queden en el formato deseado y se guarda el archivo resultante datos_nuevos.csv.
Línea de comandos

Línea de comandos

También se puede utilizar la línea de comandos para lograr esta misma transformación. Aquí presentamos algunos ejemplos de comandos que se pueden utilizar en diferentes sistemas operativos.
Sed (Linux)

Para mover las columnas Este y Norte y concatenarlas con la primera columna, se puede utilizar el siguiente comando en Linux:

sed -i 's/,/./g; s/\([0-9]\) \([0-9]\)/\1,\2/g; s/ \+/,/g' datos.csv

Este comando primero reemplaza todas las comas por puntos en todo el archivo con s/,/./g. Luego busca patrones de números separados por un espacio y los reemplaza por una coma con s/([0-9]) ([0-9])/\1,\2/g. Finalmente, reemplaza todos los espacios en blanco restantes por comas con s/ +/,/g. Con esto, se puede obtener el archivo en el formato deseado.
Awk (Linux, macOS)

Para mover las columnas Este y Norte y concatenarlas con la primera columna, se puede utilizar el siguiente comando en Linux o macOS:

awk -F ',' 'BEGIN{OFS=","} {gsub(/,/,".",$2); gsub(/,/,".",$3); print $1,$2,$3}' datos.csv > datos_nuevos.csv

Este comando utiliza Awk para procesar el archivo CSV. Primero se establece el separador de campos como , con -F ‘,’ y se indica que el separador de salida también será una coma con BEGIN{OFS=“,”}. Luego, se reemplazan todas las comas por puntos en las columnas Este y Norte con gsub(/,/,“.”,$2) y gsub(/,/,“.”,$3). Finalmente, se imprimen las tres columnas en el orden deseado y se redirige la salida a un nuevo archivo CSV datos_nuevos.csv.

R

En R, se puede utilizar la biblioteca tidyverse para leer y manipular archivos CSV. Para mover las columnas adicionales y concatenarlas con la primera columna se puede utilizar el siguiente código:

library(tidyverse) df <- read_csv("datos.csv") %>% mutate(Este =

La función read.csv() solo puede leer archivos .csv que tienen delimitadores de coma. Si los datos están delimitados por espacios en blanco, se puede usar la función read.table() y especificar el separador de campo usando el argumento sep. La sintaxis correcta para leer el archivo en R sería:

datos <- read.table("ruta/al/archivo.csv", header = TRUE, sep = " ")

Donde “ruta/al/archivo.csv” debe reemplazarse con la ruta del archivo en tu sistema de archivos. Además, se debe proporcionar el argumento header = TRUE para indicar que la primera fila del archivo contiene los nombres de las columnas.

Procesamiento de los datos en QGIS

Agregar la capa CSV en QGIS utilizando el botón “Añadir capa de texto delimitado”.

Seleccionar el sistema de referencia de coordenadas adecuado en la ventana emergente y configurar las opciones de delimitación adecuadas para el archivo CSV.

Guardar la capa como un archivo Shapefile utilizando la opción “Guardar como” en el menú contextual de la capa. Seleccionar la opción de formato “ESRI Shapefile” y configurar la ubicación y el nombre del archivo de salida.

Con estos pasos, debería ser capaz de convertir un archivo PDF de tabla de datos en un archivo .shp utilizando herramientas de extracción de PDF y comandos de sed para normalizar los datos, y procesando los datos resultantes en QGIS para generar un archivo Shapefile.

Complementos más usados en nuestro caso

QuickMapServices

Una sencilla guía para usar capas con este plugin: https://nextgis.com/blog/qms-simple-basemaps-management/#contrib

También es posible agregar capas directamente en el menú de capas:

https://accessdocs.maxar.com/en-us/Miscellaneous/DevGuides/Integration_QGIS/Integration_QGIS_Services.htm

Lat/Long utils

Geocat Bridge

Queremos probar este nuevo complemento. https://geocat.github.io/qgis-bridge-plugin/v4.2/bridge_dialog.html

Pero hay un problema de dependencias no resuelto con el módulo PyQtWebEngine

Inicialmente falló su instalación por faltar el módulo PyQt5. Resuelto con:

pip install PyQt5

Fuente

Respuesta:

Requirement already satisfied: PyQt5 in /usr/lib/python3.10/site-packages (5.15.9)
Requirement already satisfied: PyQt5-sip<13,>=12.11 in /usr/lib/python3.10/site-packages (from PyQt5) (12.11.1)

Instalamos este otro módulo:

pip install PyQtWebEngine

No se pudo cargar el módulo SIP. El soporte para Python estará deshabilitado.

Errores

Error: QGIS no encuentra librerías Podofo y Arrow

Finalmente funcionó simplemente: Instalar Arrow:

sudo pacman -S arrow

Libpodofo:

sudo pacman -S podofo

Información técnica del error:

Equipo portátil:

Versión de Python: 3.10.9 (main, Dec 19 2022, 17:35:49) [GCC 12.2.0]
Versión de QGIS: 3.28.3-Firenze Firenze, exported
5.18.19-3-MANJARO #1 SMP PREEMPT_DYNAMIC x86_64 GNU/Linux

Estoy tratando de georreferenciar una imagen .tif descargada de https://www.colombiaenmapas.gov.co. Sigo estos pasos:
1.Abro QGIS 3.28,
2: Añado capa OSM par orientarme
3. Añado imagen .tif descargada, no se muestra. Aparece este error: “Ninguna transformación disponible entre Geocoding information not available Projection Name = Unknown Units = inches GeoTIFF Units = other y EPSG:3857 - WGS 84 / Pseudo-Mercator.
No hay operaciones de coordenadas disponibles entre estos dos sistemas de referencia”
4. Consulto los metadatos descargados que no parecen contener la información de la imagen. Dado que la imagen parece no tener un SRC de origen,
5. He usado varias formas de asignarle el mismo origen del portal, MAGNA SIRGAS Nacional EPSG:9377, o el default de QGIS SRC EPSG:3857, o reproyectarlo usando el menu procesos, opción Combar(reproyectar). Con este proceso y con el siguiente paso sale error.
6. Utilicé el georreferenciador del QGIS 3.28 usando puntos desde el lienzo del mapa. La georreferenciación dice que la operación resulta exitosa, se logra crear un nuevo .tif con los puntos usados y la capa nueva se crea. Pero cuando QGIS trata de mostarrla, la pantalla principal de QGIS muestra este error:

Comando GDAL:
gdalwarp -t_srs EPSG:4326 -r near -of GTiff /home/omnibus/Descargas/C-2773-0240_modified.tif /home/omnibus/Descargas/C-2773-0240_modified-reproy.tif
Salida del comando GDAL:
ERROR 1: libarrow_dataset.so.1000: cannot open shared object file: No such file or directory
ERROR 1: libarrow_dataset.so.1000: cannot open shared object file: No such file or directory
ERROR 1: libpodofo.so.0.9.8: cannot open shared object file: No such file or directory
ERROR 1: libpodofo.so.0.9.8: cannot open shared object file: No such file or directory
ERROR 1: libarrow.so.1000: cannot open shared object file: No such file or directory
ERROR 1: libarrow.so.1000: cannot open shared object file: No such file or directory
ERROR 6: Cannot find coordinate operations from ENGCRS["Geocoding information not available Projection Name = Unknown Units = inches GeoTIFF Units = other",EDATUM[""],CS[Cartesian,2],AXIS["(E)",east,ORDER[1],LENGTHUNIT["metre",1,ID["EPSG",9001]]],AXIS["(N)",north,ORDER[2],LENGTHUNIT["metre",1,ID["EPSG",9001]]]]' to EPSG:4326’
El proceso devolvió el código de error 1

  1. Intento instalar las librerías pero pacman ni yay las encuentran. Tampoco encuentro repositorios donde descargar los sources.

  2. Otras soluciones encontradas y desechadas verificar:

Buscar la ruta de las dos librerías y agregarlas a un archivo de configuración que no existía en este caso y recargar la configuración:

pip3 show pyarrow No funcionó

sudo pacman -Ql podofo

Se encontraron las dos rutas:

/usr/lib/libpodofo.so.0.9.8
/home/omnibus/.local/lib/python3.10/site-packages/pyarrow/lib

y luego se incluyeron en un archivo:

sudo nano /etc/ld.so.conf.d/qgis.conf

y

sudo ldconfig

se reinicia y se debe probar si QGIS reconocer las librerías

Para registro: Esto se probó antes. Sin buen resultado:
Solucionado parcialmente con:

segun lo sugerido en la ultima url del sitio oficial de descargas de arrow (https://arrow.apache.org/install/) se pudo incluir “pyarrow==11.0.*” en un requirements.txt y luego instalar con:

pip3 install -r requierements.txt

Warning: QString::arg: Argument missing: Shapefiles, *.shp *.SHP

Sigue saliendo esta advertencia aún en un sistema nuevo instalado desde cero

Geoserver

Guía para publicar datos .SHP

Guía para publicar datos raster https://www.igismap.com/publish-style-raster-dataset-geoserver/