Saltar al contenido

# visualizacion-geospacial-avanzada-con-geopandas

Visualización Geospacial Avanzada con GeoPandas

Volver a la portada del curso
Notebook

Visualización de Polígonos y Líneas

Sección 3 · Visualizaciones Avanzadas

Visualización de polígonos y líneas

En este notebook practicas con dos tipos de geometría que se dibujan distinto: los polígonos (estados) tienen relleno y borde, y las líneas (ríos y rutas) solo tienen trazo. Construirás un mapa de México con sus estados, el contorno del país, los ríos principales y rutas desde la capital hacia otras ciudades, y terminarás con una versión interactiva. Descarga el notebook adjunto a esta lección y ejecútalo celda por celda.

Antes de empezar

Necesitas geopandas, matplotlib, mapclassify y folium (para el mapa interactivo). Los datos vienen de Natural Earth y se leen directo de su URL, así que la primera ejecución necesita conexión a internet.

Paso 1: polígonos con estilo

Un polígono tiene dos partes que se controlan por separado: el relleno (color o facecolor) y el borde (edgecolor y linewidth). Además, dissolve() une todos los estados en un solo polígono, el contorno del país, y boundary convierte polígonos en líneas:

import geopandas as gpd
import matplotlib.pyplot as plt

NE = "https://naciscdn.org/naturalearth/10m/"
estados = gpd.read_file(NE + "cultural/ne_10m_admin_1_states_provinces.zip",
                        where="iso_a2 = 'MX'", columns=["name", "iso_a2"])
estados = estados.dropna(subset=["name"]).to_crs(6372)
pais = estados.dissolve()

fig, ax = plt.subplots(figsize=(10, 7))
estados.plot(ax=ax, color="#f2efe9", edgecolor="#b0a99f", linewidth=0.4)
pais.boundary.plot(ax=ax, color="#333333", linewidth=1.2)
ax.set_axis_off()

Paso 2: líneas leídas con un rectángulo

La capa de ríos de Natural Earth cubre el mundo. Con bbox lees solo los que tocan el rectángulo de México y con gpd.clip recortas los tramos que salen del país. El grosor de la línea puede depender de una columna; aquí, de scalerank (menor valor, río más importante):

rios = gpd.read_file(NE + "physical/ne_10m_rivers_lake_centerlines.zip",
                     bbox=(-118, 14, -86, 33), columns=["name", "scalerank"])
rios = gpd.clip(rios.to_crs(6372), pais)
rios["grosor"] = 2.5 - rios["scalerank"] / 5
print(len(rios), "tramos de río dentro de México")

fig, ax = plt.subplots(figsize=(10, 7))
estados.plot(ax=ax, color="#f2efe9", edgecolor="#b0a99f", linewidth=0.4)
rios.plot(ax=ax, color="#3b82c4", linewidth=rios["grosor"])
ax.set_axis_off()

Paso 3: crear líneas desde puntos

Las líneas también se construyen con Shapely. Unes la Ciudad de México con otras cinco ciudades usando LineString; como el CRS está en metros, length da directamente la distancia en línea recta:

from shapely.geometry import LineString

ciudades = gpd.read_file(NE + "cultural/ne_10m_populated_places_simple.zip",
                         where="iso_a2 = 'MX'",
                         columns=["name", "pop_max", "iso_a2"]).to_crs(6372)
top = ciudades.nlargest(6, "pop_max")
origen = top.geometry.iloc[0]
rutas = gpd.GeoDataFrame(
    {"destino": top["name"].iloc[1:].values},
    geometry=[LineString([origen, p]) for p in top.geometry.iloc[1:]],
    crs=6372)
rutas["km"] = (rutas.length / 1000).round(0)
print(rutas[["destino", "km"]])

Paso 4: el mapa completo

Combinas las cuatro capas en orden: estados, ríos, rutas y ciudades. Agregas una leyenda manual para las líneas, porque plot() de GeoPandas solo genera leyendas automáticas para coropletas y categorías.

Paso 5: versión interactiva

explore() crea un mapa web con Folium: puedes acercarte, moverte y pasar el ratón sobre cada estado para ver sus atributos. Se guarda como HTML y se abre en cualquier navegador. Usa los mosaicos de OpenStreetMap, que no requieren clave (los de CartoDB ahora piden una).

Ejercicios

  • Dibuja solo los ríos con scalerank menor o igual a 6 y compara la legibilidad.
  • Resalta tu estado con otro color y un borde más grueso.
  • Calcula la longitud total de ríos dentro de cada estado con gpd.overlay o con un recorte por estado.
  • Agrega al mapa interactivo una capa con las rutas usando el argumento m= de explore().

Trampas comunes

  • Pasar color a una capa de líneas esperando un relleno: las líneas no tienen relleno, solo trazo.
  • Calcular longitudes en EPSG:4326: el resultado sale en grados.
  • Olvidar clip: los ríos de Estados Unidos y Guatemala aparecen en el mapa de México.

Recursos