¿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.
- 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».
¿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é
| Tarea | La IA (Claude por MCP de ArcGIS Pro) | Yo |
|---|---|---|
| Datos | Escribió el script de descarga y el de importación, y los ejecutó en mi proyecto abierto | Elegí el filtro (sonido, Venezuela) y descargué desde Google Colab |
| Análisis | Unió cada punto con su estado y con las ABRAE, y calculó registros y especies | Decidí cómo contar y qué advertencias mostrar |
| Mapa | Creó el mapa, la simbología, el layout y exportó a PNG y PDF | Pedí el diseño, cambié la proyección y la paleta |
| Revisión | Re-exportó cuando corregí colores y posiciones | Verifiqué cifras y textos |
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]))
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
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))
Resultados
| Estado | Registros | Especies |
|---|---|---|
| Bolívar | 1.687 | 397 |
| Falcón | 601 | 210 |
| Carabobo | 491 | 189 |
| Miranda | 411 | 163 |
| Lara | 361 | 159 |
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 WhatsAppPreguntas 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.



