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:
- Crear una “SecureWatch VBtc No-Auth ConnectID”
- Seguir los pasos de la fuente
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.
- Como los puntos que teníamos estaban desordenamos, reasignamos los ID en orden para que funcionara el siguiente paso. Pues saltando este paso al final no pudimos crear el polígono.
- Usamos la caja de herramientas del menú “Procesos” y elegimos la herramienta “puntos a ruta”

- Luego usamos la herramienta “Poligonizar”

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:
- Importamos el archivo .csv en QGIS

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

Así se ve al importar la tabla de atributos

Y así se ve la capa de puntos importada:

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
-
Intento instalar las librerías pero pacman ni yay las encuentran. Tampoco encuentro repositorios donde descargar los sources.
-
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