12. Visualización de Mapas II#

12.1. Librería OSMNX#

¿Qué es OSMNX?

OSMnx es un paquete de Python que permite descargar, modelar, analizar y visualizar fácilmente redes de calles y otras características geoespaciales de OpenStreetMap. Puedes descargar y modelar redes para caminar, conducir o andar en bicicleta con una sola línea de código, y luego analizarlas y visualizarlas. De la misma manera, puedes trabajar con servicios urbanos/puntos de interés, huellas de edificios, paradas de tránsito, datos de elevación, orientaciones de calles, velocidad/tiempo de viaje y enrutamiento.

12.1.1. Creación de Mapa con OSMNX#

12.1.1.1. Instalar Bibliotecas#

# Si necesitas instalar: pip install osmnx
import osmnx as ox
import matplotlib.pyplot as plt

12.1.1.2. Consultar por una ciudad específica: Puerto Montt#

city = 'Puerto Montt, Chile'
admin = ox.geocode_to_gdf(city)
# Descarga la red caminera  y transformala en gdf
G = ox.graph_from_polygon(admin.geometry.to_list()[0])
G = ox.project_graph(G)  # Proyecta el gráfico con mayor precisión. 
nodes, edges = ox.graph_to_gdfs(G)
# Visualiza con matplotlib
electric_blue = "#00FFFF"
color_bcg = '#000000'

f, ax = plt.subplots(1, 1, figsize=(12, 12))
edges.plot(ax=ax, color=electric_blue)
ax.set_facecolor(color_bcg)

# Elimina los ticks
for xlabel_i in ax.get_xticklabels():
    xlabel_i.set_visible(False)
for ylabel_i in ax.get_yticklabels():
    ylabel_i.set_visible(False)
for tick in ax.get_xticklines():
    tick.set_visible(False)
for tick in ax.get_yticklines():
    tick.set_visible(False)

    # Agrega el Titulo
ymin, ymax = plt.ylim()
extension = 0.2 * (ymax - ymin)
ax.set_ylim(ymin, ymax + extension)
ax.set_title(city, fontsize=30, color=electric_blue, y=0.9)

# Guarda el mapa como imagen (opcional)
plt.savefig('city_map_PM.png', bbox_inches='tight', dpi=300)

plt.show()
_images/74fc036e056c010baec63710d42335532918e80dece35bbac498e1e4569cacb0.png

12.2. Librería Geopandas#

¿Qué es Geopandas?

GeoPandas es un proyecto de código abierto para facilitar el trabajo con datos geoespaciales en Python. GeoPandas extiende los tipos de datos utilizados por pandas para permitir operaciones espaciales en tipos geométricos. Las operaciones geométricas son realizadas por Shapely. GeoPandas además depende de PyOGRIO para acceso a archivos y de Matplotlib para graficar.

12.2.1. Creación de Mapa con Geopandas#

¿Qué son los archivos Shapely (shp)?

Un shapefile es un formato sencillo y no topológico que se utiliza para almacenar la ubicación geométrica y la información de atributos de las entidades geográficas. Las entidades geográficas de un shapefile se pueden representar por medio de puntos, líneas o polígonos (áreas). El espacio de trabajo que contiene shapefiles también puede contener tablas dBASE que, a su vez, pueden almacenar atributos adicionales que se pueden unir a las entidades de un shapefile.

12.2.1.1. Ejemplo 1: Mapa de Áreas Pobladas de Chile#

import geopandas as gpd
import matplotlib.pyplot as plt

try:
    # Cargar un archivo de forma geoespacial (shapefile)
    world = gpd.read_file('Areas_Pobladas.shp')
    
    # Visualizar el mapa
    fig, ax = plt.subplots(figsize=(10, 10))  # Tamaño de la figura
    world.plot(ax=ax, edgecolor='k', facecolor='none')  # Personalización de colores y bordes
    ax.set_title('Mapa de Areas Pobladas')  # Agregar título al mapa
    ax.set_xlabel('Longitud')  # Etiqueta del eje x
    ax.set_ylabel('Latitud')  # Etiqueta del eje y
    ax.legend(['Provincias'])  # Agregar leyenda si es relevante
    
    plt.show()

#Manejo de excepciones: try-except para manejar posibles errores.

except FileNotFoundError:
    print("Error: Archivo no encontrado.")
except ValueError:
    print("Error: No se pudo cargar el archivo shapefile.")
except Exception as e:
    print("Ocurrió un error:", e)
_images/ab4dcd99e7a915cfb435dfb67e34b2d76d92f098a93ddd7a054a1fff9d3dd0ca.png

12.2.1.2. Ejemplo 2: Áreas Silvestres Protegidas#

import geopandas as gpd
import matplotlib.pyplot as plt

# Cargar datos geoespaciales
gdf = gpd.read_file('snaspe.shx')

# Especificar el tamaño de la figura (ancho x alto) en pulgadas
fig, ax = plt.subplots(figsize=(10, 10))  # Tamaño de la figura
world.plot(ax=ax, edgecolor='k', facecolor='none')  # Personalización de colores y bordes
ax.set_title('Areas Silvestres Protegidas', fontsize=30)  # Agregar título al mapa
ax.set_xlabel('Longitud')  # Etiqueta del eje x
ax.set_ylabel('Latitud')  # Etiqueta del eje y
ax.legend(['Snaspe'])  # Agregar leyenda si es relevante

# Visualizar el mapa
gdf.plot(ax=ax)
plt.show()
_images/b26bfc2acaf4eed088f3b3be82ec99290f9506abec25c17d0bf233d00eba9b32.png

12.2.1.3. Ejemplo 3: Aeropuertos y Aeródromos de Chile#

import geopandas as gpd
import matplotlib.pyplot as plt

# Cargar datos geoespaciales
gdf = gpd.read_file('Aeropuertos.shp')

# Especificar el tamaño de la figura (ancho x alto) en pulgadas
fig, ax = plt.subplots(figsize=(20, 20))  # Ajusta los valores según tus preferencias
world.plot(ax=ax, edgecolor='k', facecolor='none')  # Personalización de colores y bordes
ax.set_title('Aeropuertos y Aeródromos de Chile', fontsize=20)  # Agregar título al mapa
ax.set_xlabel('Longitud')  # Etiqueta del eje x
ax.set_ylabel('Latitud')  # Etiqueta del eje y
ax.legend(['Aeropuertos'])  # Agregar leyenda si es relevante

# Visualizar el mapa
gdf.plot(ax=ax)
plt.show()
_images/25c6813fbd0b9ca99fd5c19c7c5c423980dbe1c35fd2453e34dac948a7542500.png

12.2.1.4. Ejemplo 4: Topónimos#

import geopandas as gpd
import matplotlib.pyplot as plt

# Cargar datos geoespaciales
gdf = gpd.read_file('Toponimos.shp')

# Especificar el tamaño de la figura (ancho x alto) en pulgadas
fig, ax = plt.subplots(figsize=(20, 20))  # Ajusta los valores según tus preferencias

# Personalización de colores y bordes para gdf
gdf.plot(ax=ax, edgecolor='k', linewidth=1.2, alpha=0.7)

# Agregar título al mapa con tamaño de fuente personalizado
ax.set_title('Topónimos', fontsize=20)

# Agregar leyenda si es relevante
ax.legend(['Topónimos'], fontsize='large')

# Etiquetas de los ejes
ax.set_xlabel('Longitud')
ax.set_ylabel('Latitud')

plt.show()
_images/361aac05d1f5abeaa1ba2c9c2146cad093a002e8eca4d0d5d66635000cecc4b3.png