#30DayMapChallenge 2026 · Día 11 · Senses: Sound

0
Día 11 Senses: Sound - Reto de mapas


¿Dónde se ha grabado la fauna de Venezuela? Con 6.784 grabaciones de GBIF armé un mapa del paisaje sonoro de Venezuela en ArcGIS Pro, con Claude conectado por MCP para ejecutar los pasos. Aquí tienes el proceso completo: cómo descargar los datos, cómo contar especies por estado, por qué cambié la proyección y qué dice (y qué no dice) el resultado.

En esta guía aprenderás
  • A descargar los registros de GBIF que tienen sonido con un script que no pide cuenta.
  • A importar el CSV a ArcGIS Pro y contar especies y registros por estado con una unión espacial.
  • A elegir una proyección que no deforme el país y a diseñar el mapa con un «ecualizador».
Mapa de Grabaciones
Figura 1. Resultado final: 6.784 grabaciones georreferenciadas sobre los estados, coloreados por número de especies. Fuente: GBIF.org. Elaboración DALPGIS.


¿Qué es el paisaje sonoro y qué es GBIF?

El paisaje sonoro es el conjunto de sonidos de un lugar. Aquí lo trato en su versión más simple: dónde existen grabaciones de fauna con coordenadas. Es una pregunta útil para conservación, turismo de naturaleza y planificación de muestreos.

GBIF es la mayor base de datos abierta de registros de biodiversidad. Se puede filtrar para que devuelva solo los registros con audio. En Venezuela, el 11 de noviembre de 2026, eso dio 6.784 registros con coordenadas y sin problemas geoespaciales: unos 5.950 vienen de Xeno-canto (vía Naturalis), 763 de iNaturalist y el resto de otros aportantes.


Quién hizo qué

TareaLa IA (Claude por MCP de ArcGIS Pro)Yo
DatosEscribió el script de descarga y el de importación, y los ejecutó en mi proyecto abiertoElegí el filtro (sonido, Venezuela) y descargué desde Google Colab
AnálisisUnió cada punto con su estado y con las ABRAE, y calculó registros y especiesDecidí cómo contar y qué advertencias mostrar
MapaCreó el mapa, la simbología, el layout y exportó a PNG y PDFPedí el diseño, cambié la proyección y la paleta
RevisiónRe-exportó cuando corregí colores y posicionesVerifiqué cifras y textos

💡 Tip DALPGIS. Lo que más cambió el resultado fue cómo pedí cada cosa. Pedí la proyección, la jerarquía y las advertencias de lectura de forma explícita; lo que no pides, lo decide la IA. En la entrada del Día 10 comparo tres prompts con el mismo dato.

Paso a paso

Paso 1. Descargar los registros con sonido

La API pública de GBIF permite filtrar por país, por tipo de medio y por calidad de coordenadas. El script pide páginas de 300 registros y los guarda en un CSV. Lo corrí en Google Colab porque desde mi entorno de trabajo no había acceso a GBIF; en tu computadora funciona igual.

import requests, csv

API = "https://api.gbif.org/v1/occurrence/search"
filtros = {"country": "VE", "mediaType": "Sound",
           "hasCoordinate": "true", "hasGeospatialIssue": "false"}

total = requests.get(API, params=dict(filtros, limit=0), timeout=60).json()["count"]
print("Registros con sonido en Venezuela:", total)      # 6784 el 11-nov-2026

filas, offset = [], 0
while True:                                             # páginas de 300 registros
    d = requests.get(API, params=dict(filtros, limit=300, offset=offset), timeout=60).json()
    filas += d["results"]
    offset += 300
    if d["endOfRecords"]:
        break

campos = ["gbifID", "species", "class", "decimalLatitude", "decimalLongitude",
          "stateProvince", "year", "recordedBy", "license"]
with open("gbif_sonido_VE.csv", "w", newline="", encoding="utf-8") as f:
    w = csv.DictWriter(f, fieldnames=campos, extrasaction="ignore")
    w.writeheader(); w.writerows(filas)

Si tu consulta devuelve más de 100.000 registros, divide por años: la API de búsqueda no pasa de ese tope. Para una descarga oficial con DOI, usa la opción Download de gbif.org con una cuenta gratuita.

Paso 2. Importar el CSV y unir cada punto con su estado

El campo de estado venía vacío en el 88 % de las filas, así que no sirve para contar. La solución es una unión espacial: cada punto toma el estado del polígono que lo contiene. Los puntos de costa que caen fuera de los polígonos toman el más cercano a menos de 20 km.

import arcpy, os
arcpy.env.overwriteOutput = True
# En la ventana de Python de ArcGIS Pro: aprx = arcpy.mp.ArcGISProject("CURRENT")
base = r"D:\PROY_RETO_MAPAS\DIA_11"
g = os.path.join(base, "D11.gdb")
arcpy.management.CreateFileGDB(base, "D11.gdb")

# 1) CSV -> tabla -> puntos (WGS 84) -> Albers
arcpy.conversion.TableToTable(os.path.join(base, "gbif_sonido_VE.csv"), g, "gbif_tab")
arcpy.management.XYTableToPoint(os.path.join(g, "gbif_tab"), os.path.join(g, "gbif_pts4326"),
                                "decimalLongitude", "decimalLatitude", None, arcpy.SpatialReference(4326))
arcpy.management.Project(os.path.join(g, "gbif_pts4326"), os.path.join(g, "gbif_pts"),
                         arcpy.SpatialReference(102033))

# 2) estado de cada punto: dentro del polígono o, si cae en la costa, el más cercano a menos de 20 km
estados = r"D:\PROY_RETO_MAPAS\DIA_10\D10.gdb\Estados_D10"
arcpy.analysis.SpatialJoin(os.path.join(g, "gbif_pts"), estados, os.path.join(g, "pts_estado"),
                           "JOIN_ONE_TO_ONE", "KEEP_ALL",
                           match_option="CLOSEST", search_radius="20 Kilometers")

# 3) registros y especies distintas por estado
from collections import defaultdict
registros, especies = defaultdict(int), defaultdict(set)
with arcpy.da.SearchCursor(os.path.join(g, "pts_estado"), ["Entidad_1", "species"]) as sc:
    for estado, sp in sc:
        registros[estado] += 1
        if sp:
            especies[estado].add(sp)
for e in sorted(especies, key=lambda k: -len(especies[k]))[:5]:
    print(e, registros[e], len(especies[e]))
Dos detalles que me frenaron. El archivo de estadísticas que guardé tenía tildes y al leerlo con otro programa falló por codificación: indica encoding al abrir y guardar archivos JSON. Y si ejecutas una herramienta de ArcGIS Pro que reutiliza el nombre de un script ya corrido, a veces no se ejecuta sin avisar: cambia el nombre del archivo en cada versión y revisa el registro.

Paso 3. Cambiar la proyección para que Venezuela no se vea achatada

Mi primera versión usaba Albers Sudamérica (ESRI:102033). Es una proyección pensada para el sur del continente y, a 8° N, deforma el país. La solución fue una Lambert Conforme Cónica a medida: meridiano central 66,5° O, paralelos estándar a 5° N y 11° N y origen de latitud en 8° N. Conserva la forma, que es lo que importa aquí porque no calculo superficies.

import arcpy

WKT = ('PROJCS["Venezuela_LCC",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",'
       'SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],'
       'UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],'
       'PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],'
       'PARAMETER["Central_Meridian",-66.5],PARAMETER["Standard_Parallel_1",5.0],'
       'PARAMETER["Standard_Parallel_2",11.0],PARAMETER["Latitude_Of_Origin",8.0],'
       'UNIT["Meter",1.0]]')
sr = arcpy.SpatialReference()
sr.loadFromString(WKT)

m = aprx.createMap("D11_Sonido", "MAP")
m.spatialReference = sr                      # el mapa se dibuja en esta proyección

Paso 4. Dibujar los puntos como un brillo

Seis mil puntos se amontonan. Dibujé la misma capa dos veces: un halo grande y casi transparente debajo, y un núcleo pequeño y brillante encima. Donde hay muchos registros se suman y se ve el resplandor; donde hay uno, un punto discreto.

def simple(lyr, relleno, linea, ancho, tamano=None):
    s = lyr.symbology
    s.updateRenderer("SimpleRenderer")
    s.renderer.symbol.color = {"RGB": list(relleno)}
    s.renderer.symbol.outlineColor = {"RGB": list(linea)}
    s.renderer.symbol.outlineWidth = ancho
    if tamano:
        s.renderer.symbol.size = tamano
    lyr.symbology = s

pts = r"D:\PROY_RETO_MAPAS\DIA_11\D11.gdb\gbif_pts"
halo = m.addDataFromPath(pts); halo.name = "Halo"
simple(halo, (255, 225, 90, 24), (255, 225, 90, 0), 0, 11)        # resplandor
nucleo = m.addDataFromPath(pts); nucleo.name = "Grabaciones"
simple(nucleo, (255, 242, 150, 94), (255, 252, 215, 60), 0.2, 3)  # punto brillante

Mapa de Venezuela en verdes con puntos amarillos que marcan las grabaciones de fauna, concentrados en la cordillera de la Costa, los Andes y el oriente de Bolívar
Figura 2. Cada punto es una grabación; los estados son más claros cuanto más especies tienen registradas. CRS: Lambert Conforme Cónica a medida (WGS 84). Fuente: GBIF.org. Elaboración DALPGIS.

Paso 5. Un ecualizador para las cifras

Como el tema es sonido, representé las especies por estado como el ecualizador de un equipo de música: un bloque por cada 30 especies. En el layout son rectángulos que se generan con un bucle, así que cambiar el dato cambia el gráfico.

import math
# ecualizador: un bloque por cada 30 especies, de izquierda a derecha
for k, (estado, especies_n, registros_n) in enumerate(filas):    # filas = los 12 estados con más especies
    y = 4.92 - k * 0.222                                         # pulgadas del layout
    for b in range(math.ceil(especies_n / 30)):
        x = 1.90 + b * 0.165
        rect("B%d_%d" % (k, b), x, y, x + 0.135, y + 0.16, (150, 226, 96))

Gráfico de barras horizontales hechas con bloques que muestra las especies por estado: Bolívar 397, Falcón 210, Carabobo 189 y Miranda 163
Figura 3. Ecualizador: los 12 estados con más especies registradas y su número de registros. Fuente: GBIF.org. Elaboración DALPGIS.

Resultados

EstadoRegistrosEspecies
Bolívar1.687397
Falcón601210
Carabobo491189
Miranda411163
Lara361159
6.784grabaciones con coordenadas
925especies identificadas
58,6 %dentro de alguna ABRAE
29,0 %dentro de parques nacionales

Los datos cubren de 1980 a 2026 y los aportaron 116 grabadores distintos. El 97 % de los registros son aves (6.590). Entre las áreas protegidas, las que más especies acumulan son la Zona Protectora Cuenca Alta del Río Cojedes (176), la Reserva Forestal Imataca (170) y la Zona Protectora Macizo de Nirgua (128); entre los parques nacionales, El Caura (124), Canaima (113) y Henri Pittier (109).

Límites del análisis

  • Es esfuerzo de muestreo, no riqueza. El mapa muestra dónde se ha grabado. Bolívar lidera también por su tamaño, y los vacíos en Llanos, Zulia y Guárico reflejan poco muestreo, no silencio.
  • Casi todo son aves. Anfibios, insectos y mamíferos suman menos del 2 %, así que no se puede hablar de «fauna» en general.
  • Precisión de las coordenadas. Solo el 11 % de los registros indica su incertidumbre; algunos pueden estar generalizados.
  • Licencias. El 98 % de los registros tiene licencia CC BY-NC. El mapa agrega los datos y cita la fuente, pero si vas a un uso comercial, revisa la licencia de cada grabación.
  • La capa de estados incluye la Guayana Esequiba, sin registros, y el mapa no muestra Isla de Aves.

Dónde usarlo

El mismo flujo sirve para cualquier grupo de especies o país: cambia el filtro de GBIF y la capa de áreas. Útil para ver dónde faltan muestreos, priorizar campañas de grabación o preparar una línea base de un área protegida. Si te interesa un caso con datos satelitales, mira la expansión urbana de Caracas. Para consultar la fuente, revisa la documentación de la API de ocurrencias de GBIF.

¿Quieres un mapa de biodiversidad para tu proyecto?

Armamos mapas y análisis a medida con ArcGIS Pro y QGIS, con la proyección y el diseño correctos. La primera asesoría es gratis.

Reclama tu asesoría GRATIS Únete a la Comunidad por WhatsApp

Preguntas frecuentes

¿Qué es GBIF y por qué sirve para mapear sonidos de fauna?

GBIF es la mayor base de datos abierta de registros de biodiversidad del mundo. Permite filtrar solo los registros que tienen una grabación de audio asociada, y trae especie, lugar y fecha de cada uno. Así puedes mapear dónde se ha grabado la fauna sin tener que recopilar los datos tú mismo.

¿Necesito una cuenta de GBIF para descargar los datos?

Para la descarga oficial con DOI sí necesitas una cuenta gratuita. Para esta guía usé la API pública de búsqueda, que no pide cuenta ni clave y devuelve el mismo tipo de registros, hasta 100.000 por consulta.

¿El mapa muestra dónde hay más especies?

No. Muestra dónde se ha grabado. Los estados con más registros, como Bolívar, Falcón o Carabobo, reflejan también dónde hay más observadores y grabadores, así que los vacíos en los Llanos o en Zulia hablan de poco muestreo, no de silencio.

¿Por qué cambié la proyección del mapa?

Porque Albers Sudamérica está pensada para el sur del continente y deforma Venezuela, que está cerca del ecuador. Una Lambert Conforme Cónica a medida, centrada en 66,5° O con paralelos en 5° N y 11° N, conserva la forma del país. Como solo cuento especies y registros y no calculo superficies, la forma pesa más que el área.

¿Pueden hacer un mapa de biodiversidad para mi proyecto?

Sí. En DALPGIS armamos mapas y análisis a medida con ArcGIS Pro y QGIS. Puedes reclamar una asesoría gratis para contarnos tu caso.

Sigue la serie completa en GeoHacks Insight y entra a la Comunidad DALPGIS por WhatsApp.

Entradas que pueden interesarte

Sin comentarios

Posts Populares

¡Bienvenido al Curso Básico de ArcGIS Pro Desde Cero!

¡Bienvenido al Curso Básico de ArcGIS Pro Desde Cero!

Hola, soy Daniel León, ingeniero civil y experto en Siste…

NDVI con ArcGIS: Guía completa para el monitoreo de cultivos

NDVI con ArcGIS: Guía completa para el monitoreo de cultivos

¿Te gustaría saber qué es el NDVI y cómo puedes usarlo con…

ArcGIS Pro: ¿Cuánto cuesta y dónde adquirirlo?

ArcGIS Pro: ¿Cuánto cuesta y dónde adquirirlo?

ArcGIS Pro es una potente herramienta de software diseñada…

ArcGIS Pro: Asignar simbología a rasters con archivo .CLR paso a paso (Colormap)

ArcGIS Pro: Asignar simbología a rasters con archivo .CLR paso a paso (Colormap)

1) Verifica que tu raster sea compatible con .clr Los archi…