• Saltar a la navegación principal
  • Saltar al contenido principal
  • Saltar al pie de página
logo web Geoinnova

Geoinnova

Consultoría y Formación en SIG y Medio Ambiente

  • Geoinnova
    • Asociación
    • Equipo
    • Visor de proyectos Geoinnova
    • Geolibrería
    • Alianzas Estratégicas
  • Consultoría
    • Consultoría y Desarrollo en Sistemas de Información Geográfica
    • Consultora Ambiental
    • Turismo sostenible
    • Planificación urbana y ordenación del territorio
    • Planes Urbanos de Actuación Municipal – PUAM
    • Geomarketing
  • Servicios
    • Planero Web
    • QElectricGIS
    • Plugins
  • Formación
    • Todos los cursos
    • Webinars
    • Máster y Diplomas
    • Cursos de ArcGIS
    • Cursos de QGIS
    • Cursos de Teledetección
    • Cursos de Medioambiente
  • Medio Ambiente
    • Consultora Ambiental
    • Estudios ambientales para proyectos de energías renovables
    • Estudios de Impacto e Integración Paisajística
    • Evaluación Ambiental Estratégica de planes y programas
    • Estudio de Impacto Ambiental para proyectos
    • Cálculo huella de carbono
    • Educación Ambiental
    • Cursos de Medioambiente
  • Coworking
  • Blog
    • SIG
    • Medio Ambiente
    • Teledetección
    • Programación y Desarrollo SIG
    • Corporativo
  • Contacto
    • Soporte de Clientes – Tickets
Programación y Desarrollo SIG

Análisis SIG con Python y la librería GeoPandas

14/09/2021 Deja un comentario

Desde hace unos años, Python es el lenguaje de programación por excelencia dentro de los Sistemas de Información Geográfica.

Su rápida curva de aprendizaje, la flexibilidad respecto al estilo de codificación, la existencia de librerías de análisis geográfica como GeoPandas, GDAL o Rasterio, la posibilidad que ofrece para la automatización de tareas de geoprocesamiento o la integración en SIG como ArcGIS de ESRI, QGIS o GRASS hace de Python el lenguaje más utilizado por los usuarios y programadores de SIG.

En la siguiente entrada usaremos Python y la librería de acceso y análisis de datos geográficos GeoPandas para realizar un proceso que implicará varias de las funcionalidades básicas de cualquier SIG.

  • Entrada y salida de datos (I/O).
    • Cargaremos archivos en formato Shapefile
    • Almacenaremos el resultado del análisis en formato Geopackage
  • Consulta y edición de datos
    • Con distintos métodos de Geopandas podremos consultar los atributos asociados, el sistema de coordenadas, los tipos de datos, consultas geométricas
    • Actualizaremos y añadiremos nueva información.
  • Geoprocesamiento y análisis
    • Unión de múltiples capas mediante bucle
    • Generaremos estadísticas agrupadas
  • Representación de datos en mapas usando Matplotlib

El objetivo del proyecto es el análisis del tipo de cultivos y usos de suelo de parcelario catastral de 14 municipios de la provincia de Valencia. Este tipo de trabajo constituye un proceso real que se integra en los estudios de impacto ambiental realizados por el Área de Territorio de Geoinnova.

Para los trabajos se ha usado la interfaz interactiva JupyterLab. Las librerías necesarias han sido instaladas con el gestor de paquetes y dependencias Conda.

Importación de librerías Python

En primer lugar será necesario añadir las librerías que vamos a necesitar.

Importación de librerías geo en Python
  • os. Es un módulo estándar de Python nos permite acceder a funcionalidades dependientes del sistema operativo será usado para obtener el listado de subcarpetas donde hemos guardado los datos catastrales.
  • Pandas. La librería Panda está especialmente pensada para el manejo y análisis de estructuras de datos mediante índices o nombres para filas y columnas. En nuestro script usaremos su método concat para unir todos los archivos shapes de subparcelas catastrales.
  • GeoPandas. La finalidad de GeoPandas es la misma que la de la librería anterior pero en esta ocasión manejando, creando y analizando información geográfica.
  • Matplotlib. Esta biblioteca se encargará de la parte gráfica de nuestro código. Al ser usada dentro del entorno interactivo de JupyterLab podremos crear representaciones y mapas de nuestros datos espaciales.

Lectura y consulta archivos Shapefile

Usando el método read_file() de Geopandas podemos recuperar uno de los archivos y empezar a trabajar con él convirtiéndolo en un objeto de tipo GeoDataFrame.

Los formatos vectoriales soportados por GeoPandas son los incorporados por la librería Fiona y van desde los clásicos Shapefile, hasta extensiones CAD (DXF y DGN), pasando por GeoJSON, TopoJSON, GML o GPX entre otros. Es posible también acceder a datos almacenados en bases de datos PostGIS.

Formatos vectoriales soportados por GeoPandas
Formatos vectoriales soportados por GeoPandas

La siguiente captura muestra algunas operaciones con el objeto GeoDataFrame como consultar el sistema de coordenadas, ver el número total de registros u obtener los metadatos del conjunto de datos almacenados.

Consulta de datos

Edición de atributos. Cálculo de área

Para obtener las estadísticas finales de superficies por tipo de cultivos vamos a crear un nuevo campo que almacene el área.

Podemos consultar el área de capa polígono con la propiedad que devuelve el área de GeoPandas y usarlo posteriormente para añadir la información en una nueva columna.

Cálculo de área con GeoPandas

Visualización datos

Para la generación de un mapa sencillo con los datos cargados usamos la función plot(). El método permite añadir argumentos para hacer una representación clasificada por los códigos de cultivos, aplicando una rampa de color que destaca las diferencias cualitativas.

Visualización mapas con GeoPandas

Geoprocesamiento. Unión de capas vectoriales

En la estructura de ficheros de nuestro proyecto tenemos una carpeta denominada catastro donde hemos almacenado en subcarpetas la información del parcelario de varios municipios de Valencia.

Estos archivos en formato Shape, han sido previamente tratados con otro código Python para que contengan los datos relativos a los cultivos asociados a cada subparcela. La información procede de la Sede Virtual de Catastro.

El siguiente paso de nuestro trabajo será la obtención de una única capa con la información parcelaria de los 14 municipios que contiene datos de cultivo, pendiente y altitud media. Sobre esta capa podríamos realizar otro tipo de geoprocesos como por ejemplo un análisis de intersección sobre el trazado proyectado de una línea de alta tensión.

El código debe ser capaz de recorrer la estructura de subcarpetas localizando el archivo shape (SUBPARCELA_RU.shp) y devolvernos la capa de unión. Para obtener el listado de carpetas usaremos el método listdir() de la librería os.

La unión de las capas se hará con concat() de la librería Pandas. El método va a necesitar una lista con el conjunto de GeoDataFrames a unir.

Usaremos bucle for que itere sobre la lista con el nombre de los municipios, para guardar el conjunto de datos que cree al final un único objeto con todos los registros.

Bucle for en Python

Composición de mapas con Matplotlib

Vamos ahora a generar una composición algo más compleja usando la librería Matplotlib.

Script en Python para crear un mapa usando Maptplotlib

El resultado de la composición es el siguiente.

Mapa de coropletas con Maptplotlib

Agrupación de datos y generación de estadísticas

Con los datos finales podemos realizar un primer análisis estadístico sobre la superficie total de subparcelas por tipo de cultivo.

Para ello, vamos a necesitar calcular del área y almacenarla en una nueva columna como hemos visto en el apartado anterior. Con este nuevo dato usaremos las funciones de agregación que nos devolverán por cultivo los siguientes datos estadísticos:

  • Total de parcelas
  • Superficie en metros cuadrados por cultivo
  • Área de la parcela máxima y de la mínima
  • Superficie media
Generación de estadísticas por agrupación con Python y Pandas

Exportación de resultados en formato GeoPackage y CSV

Terminamos nuestro análisis con dos productos finales: un archivo en formato GeoPackage con los datos geográficos y un CSV con el análisis estadístico que puede ser consultado por ejemplo con un programa de hojas de cálculo.

Salida de datos con GeoPandas y Pandas

Los métodos son:

  • to_file() de GeoPandas para los datos geográficos
  • to_csv() de Pandas para la información estadística.

Desde Geoinnova podemos dar apoyo a mejorar los flujos de trabajo geoespaciales

Con este completo ejemplo hemos demostrado la potencialidad del lenguaje de programación Python para trabajos de tipo GIS.

Las posibilidades de integración en flujos de trabajo repetitivos tanto para empresas geotecnológicas como aquellas que trabajan con datos de índole geográfico. Si necesitáis apoyo en la automatización de estos procesos no dudéis en poneros en contacto con nosotros.

Etiquetas: gis, python

Apúntate a nuestra newsletter semanal

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Información legal

Cumplimos el RGPD (Reglamenteo General de Protección de Datos) y esta en la primera información que debes saber. Responsable: Asociación Geoinnova. Finalidad: Apuntarte en nuestra base de datos para poder enviarte nuestra newsletter y cualquier otra información de interes. Legitimidad: Nos das tu consentimiento para comunicarnos contigo. Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir tus datos. Para una información más ampliada entra a nuestra política de privacidad.

Artículos relacionados

Psycopg2 para acceder a una base de datos PostGIS con Python
06/02/2023
Cómo documentar proyectos en QGIS con el complemento ‘Project Reports’
17/01/2023
Cómo instalar librerías python en PyQGIS
06/10/2022

Patricio Soriano

Geógrafo “Full-stack” y desarrollador web especializado en Tecnologías de Información Geográfica. Vinculado con la labor de consultoría, ha realizado diversos proyectos sobre análisis urbanístico, planes de vivienda y gestión patrimonial, así como la puesta en marcha de Sistemas de Información Geográfica corporativos para la administración pública. Dentro de los trabajos como desarrollador se encuentran el diseño de varias aplicaciones webmapping y desarrollos para QGIS (Spanish Inspire Catastral Downloader, CDAU Downloader o qgis2mapea). Autor del blog www.sigdeletras.com y organizador de Geoinquietos Córdoba. Actualmente se encuentra incorporado al equipo de desarrollo de Geoinnova en aplicaciones Open Source. Como docente lleva impartiendo cursos profesionales de SIG desde 2007 para diferentes entidades y en diferentes modalidades (tanto presencial como online). Especializándose en los últimos años en cursos de QGIS a distintos niveles.

Interacciones con los lectores

¿Quieres comentarnos algo? Adelante! Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Footer

Menú Legal

  • Aviso Legal
  • Política de privacidad
  • Política de cookies
  • Términos y condiciones

Otras páginas de interes

  • Promociones y descuentos en formación
  • Formación bonificada FUNDAE

Contacto

Calle Luis Morondo Urra nº 8 Bajo A
31006 Pamplona (Navarra)
info@geoinnova.org
+34 948 117 137

Horario de atención

Lunes a Viernes - 09:00 a 14:00 y de 16:00 a 19:00.
Fines de semana y Festivos - Exclusivamente por mail.
Horario de Verano (01 de julio al 30 de agosto): De lunes a viernes de 8 a 15h.

Síguenos en Redes Sociales

Apúntate a nuestra newsletter

"*" señala los campos obligatorios

Consentimiento*
Este campo es un campo de validación y debe quedar sin cambios.

Entidad adherida a Confianza Online Certificado de inscripción en el Registro de huella de carbono, compensación y proyectos de absorción Logo Plazox

© 2023 · Desarrollada por Geoinnova en colaboración con OikosMSP

Gestionar el Consentimiento de las Cookies
Utilizamos tecnologías como las cookies para almacenar y/o acceder a la información del dispositivo. Lo hacemos para mejorar la experiencia de navegación y para mostrar anuncios personalizados. El consentimiento a estas tecnologías nos permitirá procesar datos como el comportamiento de navegación o las identificaciones únicas en este sitio. No consentir o retirar el consentimiento, puede afectar negativamente a ciertas características y funciones.
Funcional Siempre activo
El almacenamiento o acceso técnico es estrictamente necesario para el propósito legítimo de permitir el uso de un servicio específico explícitamente solicitado por el abonado o usuario, o con el único propósito de llevar a cabo la transmisión de una comunicación a través de una red de comunicaciones electrónicas.
Preferencias
El almacenamiento o acceso técnico es necesario para la finalidad legítima de almacenar preferencias no solicitadas por el abonado o usuario.
Estadísticas
El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos. El almacenamiento o acceso técnico que es utilizado exclusivamente con fines estadísticos anónimos. Sin una requerimiento, el cumplimiento voluntario por parte de su proveedor de servicios de Internet, o los registros adicionales de un tercero, la información almacenada o recuperada sólo para este propósito no se puede utilizar para identificarlo.
Marketing
El almacenamiento o acceso técnico es necesario para crear perfiles de usuario para enviar publicidad, o para rastrear al usuario en un sitio web o en varios sitios web con fines de marketing similares.
Administrar opciones Gestionar los servicios Gestionar proveedores Leer más sobre estos propósitos
Preferencias
{title} {title} {title}