folium: paquete para desarrollo de mapas web¶
Descripción general¶
folium es una biblioteca de Python para el desarrollo de mapas web, basada en la biblioteca Leaflet de JavaScript. Así, es posible manipular los datos con bibliotecas de Python (ej. pandas, GeoPandas) y presentarlos en mapas Leaflet a través de folium.
Instalación¶
folium puede instalarse tanto mediante Conda como mediante pip.
# Instalación mediante Conda
conda install -c conda-forge folium
# Instalación mediante pip
pip install folium
Carga¶
import folium
# Versión
folium.__version__
'0.12.1.post1'
Opciones básicas de configuración¶
Las siguientes son algunas de las opciones de configuración que provee la clase Map.
# Creación de un mapa con un centro (x, y)
m = folium.Map(location=[10, -84])
# Despliegue del mapa en el notebook
m
# Especificación del ancho y del largo (en pixeles) del mapa
m = folium.Map(
location=[10, -84],
width=650, height=400)
m
# Especificación del nivel inicial de acercamiento (zoom)
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7)
m
Manejo de capas base¶
Por defecto, Folium utiliza OpenStreetMap como mapa base. Pueden elegirse otros mapas base mediante el parámetro tiles, el cual tiene un conjunto de valores predeterminados:
“OpenStreetMap”
“Mapbox Bright”
“Mapbox Control Room”
“Stamen” (“Terrain”, “Toner” y “Watercolor”)
“Cloudmade” (Requiere una llave del API)
“Mapbox” (Requiere una llave del API)
“CartoDB” (“positron” y “dark_matter”)
# Mapa de Stamen Terrain
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=5,
tiles='Stamen Terrain')
m
# Mapa de Stamen Toner
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
tiles='Stamen Toner')
m
# Mapa de Stamen Watercolor
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
tiles='Stamen Watercolor')
m
# Mapa de CartoDB positron
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
tiles='CartoDB positron')
m
# Mapa de CartoDB dark_matter
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
tiles='CartoDB dark_matter')
m
El siguiente es un ejemplo que utiliza la opción como mapa base el mapa “World Imagery” de ESRI. Pueden verse más ejemplos de mapas de ESRI en https://ocefpaf.github.io/python4oceanographers/blog/2015/03/23/wms_layers/.
# Mapa "World Imagery "de ESRI
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
tiles='http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/MapServer/tile/{z}/{y}/{x}',
attr='ESRI World Imagery')
m
Registros de presencia de especies en la Infraestructura Mundial de Información en Biodiversidad (GBIF). Pueden verse más ejemplos de uso de este tipo de información en la documentación del API de mapas de GBIF.
# Registros de presencia de especies en GBIF
m = folium.Map(
location=[0, 0],
width=650, height=400,
zoom_start=1,
tiles='https://api.gbif.org/v2/map/occurrence/density/{z}/{x}/{y}@1x.png?style=purpleYellow.point',
attr='GBIF')
m
Controles¶
folium proporciona un conjunto de controles que le permiten al usuario interactuar con el mapa.
# Control de escala
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
control_scale=True)
m
# Control de capas
# Creación de un mapa
m = folium.Map(
location=[10, -84],
width=650, height=400,
zoom_start=7,
control_scale=True)
# Se añaden capas base adicionales
folium.TileLayer(
tiles='CartoDB positron',
name='CartoDB positron').add_to(m)
folium.TileLayer(
tiles='Stamen Terrain',
name='Stamen Terrain').add_to(m)
# ESRI NatGeo World Map
folium.TileLayer(
tiles='http://services.arcgisonline.com/arcgis/rest/services/NatGeo_World_Map/MapServer/MapServer/tile/{z}/{y}/{x}',
name='NatGeo World Map',
attr='ESRI NatGeo World Map').add_to(m)
# Densidad de registros de presencia de especies
folium.TileLayer(
tiles='https://api.gbif.org/v2/map/occurrence/density/{z}/{x}/{y}@1x.png?&bin=hex&hexPerTile=28&style=classic.poly',
name='Densidad de registros de presencia de especies',
attr='GBIF').add_to(m)
# Se añade un control de capas
folium.LayerControl().add_to(m)
m
# Grabación del mapa en el disco
m.save("/home/mfvargas/mapa-folium.html")
Mapas con múltiples capas¶
# Mapa con capa base y capa vectorial
# Creación del mapa
m = folium.Map(location=[10, -84], tiles='CartoDB positron', zoom_start=7)
# Se añaden al mapa las capas GeoJson
folium.GeoJson(data="https://github.com/pf3311-cienciadatosgeoespaciales/2021-iii/raw/main/contenido/b/datos/redvial.geojson", name='Red vial').add_to(m)
# Control de capas
folium.LayerControl().add_to(m)
# Despliegue del mapa
m