Análisis Geoespacial con Python
Aprende los fundamentos del análisis geoespacial y construye tu primer GIS con Python puro
La tecnología geoespacial está impactando nuestro mundo al cambiar nuestro conocimiento de la historia humana. En este capítulo, exploraremos la historia del análisis geoespacial, que precede a las computadoras e incluso a los mapas de papel.
Examinaremos por qué querrías aprender a usar un lenguaje de programación como analista geoespacial, en lugar de simplemente usar aplicaciones GIS. Esto nos ayudará a comprender la importancia de hacer el análisis geoespacial tan accesible como sea posible para tantas personas como sea posible.
Análisis Geoespacial y Nuestro Mundo
En la década de 1880, los exploradores británicos comenzaron a aplicar rigor científico a la excavación de sitios culturales antiguos. El campo de la arqueología es una tarea frustrante, costosa y a menudo peligrosa que requiere paciencia y una buena dosis de suerte.
La Tierra es notablemente buena guardando secretos y borrando la historia de los esfuerzos humanos. Ríos cambiantes, inundaciones, volcanes, tormentas de polvo, huracanes, terremotos, incendios y otros eventos tragan ciudades enteras en el paisaje circundante.
El Descubrimiento de la Dra. Sarah Parcak
En 2007, la arqueóloga Dra. Sarah Parcak, de la Universidad de Alabama en Birmingham, comenzó a persuadir a nuestra obstinada Tierra para que revelara sus secretos sobre dónde han estado los humanos y qué han hecho.
Historia del Análisis Geoespacial
El análisis geoespacial puede rastrearse hasta hace 15,000 años, en la cueva de Lascaux en el suroeste de Francia. En esta cueva, artistas paleolíticos pintaron animales comúnmente cazados y lo que muchos expertos creen son mapas estelares astronómicos.
El Padre del GIS
El Dr. Roger Tomlinson es conocido como "el padre del GIS" por su trabajo creando el Sistema de Información Geográfica de Canadá (CGIS) en la década de 1960. CGIS es el punto de partida del análisis geoespacial moderno.
GIS y Teledetección
Existen dos campos principales en el análisis geoespacial: los Sistemas de Información Geográfica (GIS) y la Teledetección (Remote Sensing). Aunque comparten muchas similitudes, tienen enfoques distintos.
→ Modelado y análisis espacial
→ Consultas de atributos
→ Mapas temáticos
→ Gestión de bases de datos geoespaciales
→ Procesamiento de imágenes
→ Clasificación de superficies
→ Detección de cambios
→ Análisis espectral
Datos de Elevación
Los datos de elevación pueden existir en formato vectorial o raster. Un tipo común de dato de elevación proviene de la misión SRTM (Shuttle Radar Topography Mission), que mapeó la mayoría de la superficie terrestre de la Tierra.
Conceptos GIS Comunes
Comprender los conceptos fundamentales de GIS es esencial para cualquier analista geoespacial. Estos conceptos forman la base de todas las operaciones de análisis espacial.
Estructuras de Datos Vectoriales
Los datos vectoriales GIS usan coordenadas que consisten, como mínimo, en un valor x horizontal y un valor y vertical para representar una ubicación en la Tierra. Los puntos, líneas y polígonos modelan objetos del mundo real.
Reglas de Polígonos
Operaciones Espaciales Comunes
bounding box es el cuadro más pequeño que puede contener todos los puntos de un dataset. El convex hull es similar, pero es el polígono más pequeño posible que puede contener el dataset.
Conceptos de Teledetección
La teledetección implica la recolección de información sobre un objeto sin hacer contacto físico con él. En el contexto del análisis geoespacial, ese objeto generalmente es la Tierra.
Imágenes como Datos
En teledetección, las imágenes digitales se representan como arrays de valores de píxeles. Cada píxel contiene información sobre la reflectancia de la luz en diferentes longitudes de onda.
Operaciones Raster Comunes
histograma muestra la distribución estadística de valores en un dataset. Es clave para operaciones como mejorar el contraste, clasificación de objetos y comparación de imágenes.
Construyendo SimpleGIS
Ahora que tenemos una mejor comprensión del análisis geoespacial, el siguiente paso es construir un GIS simple llamado SimpleGIS usando Python. Este pequeño programa será un GIS técnicamente completo con un modelo de datos geográficos y la capacidad de renderizar datos como un mapa temático visual.
Arquitectura del Sistema
Configuración del Modelo de Datos
import turtle as t # Constantes para acceder a índices de listas NAME = 0 POINTS = 1 POP = 2 # Estado de Colorado: nombre, puntos del polígono, población state = ["COLORADO", [[-109, 37], [-109, 41], [-102, 41], [-102, 37]], 5187582] # Lista de ciudades: nombre, coordenadas, población cities = [] cities.append(["DENVER", [-104.98, 39.74], 634265]) cities.append(["BOULDER", [-105.27, 40.02], 98889]) cities.append(["DURANGO", [-107.88, 37.28], 17069])
Configuración del Mapa
# Dimensiones del mapa map_width = 400 map_height = 300 # Calcular el bounding box del estado minx = 180 maxx = -180 miny = 90 maxy = -90 for x, y in state[POINTS]: if x < minx: minx = x elif x > maxx: maxx = x if y < miny: miny = y elif y > maxy: maxy = y # Calcular ratios de escala dist_x = maxx - minx dist_y = maxy - miny x_ratio = map_width / dist_x y_ratio = map_height / dist_y
Función de Conversión de Coordenadas
def convert(point): """Convierte coordenadas geográficas a píxeles.""" lon = point[0] lat = point[1] # Transformar a coordenadas de pantalla x = map_width - ((maxx - lon) * x_ratio) y = map_height - ((maxy - lat) * y_ratio) # Ajustar para el origen centrado de turtle x = x - (map_width / 2) y = y - (map_height / 2) return [x, y]
convert() es fundamental en todo programa geoespacial. Transforma coordenadas del mundo real (longitud/latitud) en coordenadas de píxeles para visualización.
Renderizado del Mapa
# Dibujar el estado de Colorado t.up() first_pixel = None for point in state[POINTS]: pixel = convert(point) if not first_pixel: first_pixel = pixel t.goto(pixel) t.down() # Cerrar el polígono t.goto(first_pixel) t.up() # Etiquetar el estado t.goto([0, 0]) t.write(state[NAME], align="center", font=("Arial", 16, "bold")) # Dibujar las ciudades for city in cities: pixel = convert(city[POINTS]) t.up() t.goto(pixel) t.dot(10) # Dibujar punto t.write(city[NAME] + ", Pop.: " + str(city[POP]), align="left") t.up()
Consultas Espaciales
# Consulta: ¿Cuál ciudad tiene mayor población? biggest_city = max(cities, key=lambda city: city[POP]) t.goto(0, -200) t.write("La ciudad más grande es: " + biggest_city[NAME]) # Consulta: ¿Cuál ciudad está más al oeste? western_city = min(cities, key=lambda city: city[POINTS]) t.goto(0, -220) t.write("La ciudad más occidental es: " + western_city[NAME]) # Finalizar t.pen(shown=False) t.done()
La ciudad más occidental es: DURANGO
Expansiones Posibles
SimpleGIS puede expandirse de muchas maneras. El sistema básico que hemos construido sirve como plataforma para funcionalidades más avanzadas.
Si deseas agregar más capas de datos, puedes crear más listas, pero estas se volverán difíciles de manejar. En ese caso, puedes usar el módulo SQLite de Python, que proporciona una base de datos tipo SQL que puede guardarse en disco o ejecutarse en memoria.
Por Qué Programar para Análisis Geoespacial
Resumen del Capítulo
01 // Historia Geoespacial
Desde las cuevas de Lascaux hasta los sistemas GIS modernos, el análisis geoespacial ha evolucionado durante 15,000 años.
02 // GIS vs Teledetección
Dos campos complementarios: GIS para datos vectoriales y modelado, teledetección para imágenes satelitales.
03 // Operaciones Espaciales
Buffer, Dissolve, Intersection y Union son las operaciones fundamentales del análisis espacial.
04 // SimpleGIS en Python
Un GIS completo en menos de 60 líneas de código Python puro, demostrando el poder del lenguaje.