Toda pregunta interesante sobre una ciudad esconde un dónde. ¿Dónde dejo la bici? ¿Qué distrito tiene más zonas verdes? ¿Qué hay cerca de mi casa? Los datos existen — Madrid publica cientos de capas abiertas en ArcGIS — pero viven detrás de APIs que un ciudadano normal jamás tocará. Tu misión: el intérprete. Un agente al que le preguntas como a un amigo madrileño y que por debajo geocodifica, consulta capas y cruza geometrías para responder con datos frescos, no con recuerdos del LLM.
El superpoder: preguntas con coordenadas
Lo que diferencia este reto de cualquier chatbot: la consulta espacial. "Cerca de", "dentro de", "a menos de X metros" — cosas que un LLM no puede saber y una API geográfica responde en milisegundos.
De "Plaza Mayor" a (−3.707, 40.415). El geocoder mundial de ArcGIS, sin token. Ojo: en Madrid hay varias "Plaza Mayor" — la ambigüedad es parte del reto.
Cada dataset es un Feature Service con API REST: filtros SQL (where), campos, límites. Distritos, BiciMAD, zonas verdes…
El golpe maestro: buscar entidades a X metros de un punto, o en qué polígono (distrito) cae. Dos llamadas encadenadas = magia para el usuario.
Tu misión
Un asistente ciudadano sobre datos abiertos de Madrid que combine, como mínimo, estas cuatro capacidades como tools de un agente:
| Tool | Qué hace | API |
|---|---|---|
| geocodificar | Lugar o dirección → coordenadas | geocode.arcgis.com · findAddressCandidates |
| buscar_datasets | Descubre capas abiertas por tema — el agente explora el catálogo él solo | hub.arcgis.com/api/v3/datasets |
| consultar_capa | Filtro SQL sobre cualquier Feature Service | …/FeatureServer/0/query?where=… |
| buscar_cerca | Entidades a < X metros de un punto | …/query?geometry=x,y&distance=… |
Niveles
El asistente que encadena
Agente con las 4 tools que resuelve preguntas de dos saltos: geocodificar el lugar mencionado → consulta espacial sobre la capa relevante → respuesta útil citando la fuente. Con al menos dos capas dominadas (p.ej. Distritos + BiciMAD).
El explorador de datos
El agente descubre capas nuevas por sí mismo con el catálogo Hub ("¿hay datos de zonas verdes?" → las encuentra, inspecciona su esquema con una consulta pequeña y las usa). Manejo de ambigüedad del geocoder (verificar el distrito esperado, re-geocodificar con código postal).
El mapa
Enséñalo: un mini-frontend con ArcGIS Maps SDK for JavaScript que pinte los resultados del agente sobre un mapa de Madrid, o comparativas entre distritos con datos de varias capas. La vía "full-code" para perfiles senior.
Datos y recursos disponibles
| Recurso | Contenido | Cómo se usa |
|---|---|---|
| Capa Distritos de Madrid ✓ verificada | 21 distritos con nombre, código y superficie (polígonos) | services-eu1.arcgis.com/UrtTdLP2PYSxwtI6/…/Distritos_de_Madrid/FeatureServer/0 |
| Capa BiciMAD ✓ verificada | 123 estaciones con nombre y anclajes (puntos) | …/BiciMAD/FeatureServer/0 |
| Catálogo ArcGIS Hub | Miles de datasets abiertos buscables por texto (zonas verdes, aparcamientos…) | API pública, sin token |
| Geocoder mundial | Direcciones y lugares → coordenadas WGS84 | Sin token para búsquedas no almacenadas |
| Recetas útiles | El patrón de tool HTTP con $fromAi (🌦️ El Meteorólogo — cámbiale las URLs por las de ArcGIS) y el esqueleto de agente (🧠) | El Recetario |
Documentación útil: Query de Feature Services (REST) · Geocoding REST · Portal de datos abiertos de Madrid · HTTP Request en n8n
Definition of Ready · Definition of Done
- Las 2 capas verificadas probadas a mano (una query en el navegador)
- Entendido el patrón
/query: where, outFields, geometry, distance - Elegidas 2-3 preguntas ciudadanas que guiarán la demo
- Plan B si una capa externa falla en directo (capa alternativa o respuesta cacheada)
- Pregunta con lugar → geocodifica + consulta espacial encadenadas sin ayuda
- "¿En qué distrito está X?" resuelto cruzando punto contra polígonos
- Radio ajustable ("a menos de 300 metros") entendido desde el lenguaje
- Cada respuesta cita la capa/fuente usada
- Si la API no devuelve resultados o falla, el agente lo dice — no alucina lugares
Pruebas UAT — autoevalúate antes del pitch
"¿Qué estaciones de BiciMAD hay a menos de 500 metros de Callao?"
Geocodifica Callao → query espacial sobre BiciMAD con distance=500 → lista de estaciones con nombres reales de la capa. Fuente citada.
"Estoy en la calle Alcalá 200, ¿qué distrito es esto?"
Geocodifica la dirección → cruza contra la capa de distritos → responde con el distrito correcto (y su código).
"¿Hay datos abiertos sobre zonas verdes en Madrid?"
Busca en el catálogo Hub, presenta 2-3 datasets con nombre y nº de registros, y ofrece consultar alguno. No dice "no lo sé" teniendo un catálogo entero como tool.
"¿Qué hay cerca de la Plaza Mayor?"
El geocoder puede devolver OTRA Plaza Mayor (hay varias). Un sistema excelente detecta la incoherencia (¿distrito raro?), avisa y re-geocodifica con más contexto. Como mínimo: transparencia sobre qué punto usó.
resultRecordCount (payloads gigantes) · olvidar returnGeometry=false cuando no necesitas los polígonos · demo dependiente de una capa que nadie probó esa mañana.