API de direcciones de la IDE
Compatible con SUDIR (direcciones.ide.uy) · en desarrollo, para probar antes de producción
Para probarla alcanza con cambiar la dirección base de https://direcciones.ide.uy por
https://direcciones-dev.ide.uy. Las rutas, los parámetros y el formato de las respuestas son los mismos.
Qué es
El buscador de direcciones de la plataforma de la IDE, con las mismas rutas que SUDIR (/api/v1/geocode/… y
/api/v0/geocode/…). Usa los mismos datos de SUDIR más los de otras fuentes oficiales, y responde con los mismos campos,
en el mismo orden y con los mismos tipos. Donde SUDIR responde mal, esta responde bien: las diferencias están abajo.
Especificación: OpenAPI 3 ·
Swagger 2.0 (la que publicaba SUDIR en /v2/api-docs).
Se pueden abrir en Postman o en Swagger Editor.
Ejemplos
- Geocodificar una dirección:
/api/v1/geocode/direcUnica?q=Herrera%20826%2C%20Durazno - Autocompletar:
/api/v1/geocode/candidates?q=18%20de%20julio%2C%20minas&limit=5 - Esquina:
/api/v1/geocode/direcUnica?q=Rivera%20y%20Soca%2C%20Montevideo - Ruta y kilómetro:
/api/v1/geocode/rutakm?ruta=8&km=120 - De un punto a la dirección:
/api/v1/geocode/reverse?latitud=-34.3759&longitud=-55.2371&limit=2 - Localidades de un departamento (v0):
/api/v0/geocode/localidades?departamento=Lavalleja
Respuesta (abreviada) de direcUnica?q=Herrera 826, Durazno:
[{"type":"CALLEyPORTAL","id":"…","address":"DOCTOR LUIS ALBERTO DE HERRERA 826","idCalle":…,
"nomVia":"DOCTOR LUIS ALBERTO DE HERRERA","postalCode":"…","idLocalidad":…,"localidad":"DURAZNO","idDepartamento":22,
"departamento":"DURAZNO","manzana":null,"solar":null,"inmueble":null,"idCalleEsq":0,"km":0.0,"priority":0,"geom":null,
"tip_via":null,"lat":-33.38…,"lng":-56.52…,"portalNumber":826,"letra":null,"stateMsg":"","source":"ide_uy",
"ranking":30.0000001,"state":1}]
state 1 es exacto (el punto existe) y 2 aproximado (calculado). Sin resultados, la respuesta es [].
Los errores tienen el formato de SUDIR: {"timestamp":…,"status":400,"error":"Bad Request","message":"","path":…}.
Diferencias con SUDIR
- Nunca otra calle como si fuera la pedida. Si la dirección no existe, SUDIR devuelve igual algo parecido (por ejemplo "18 de Mayo 570" para "18 de Julio 600"). Esta API devuelve la dirección pedida, una ubicación calculada sobre esa misma calle marcada como aproximada (state 2), o nada.
- Coordenadas reales. Los kilómetros de ruta (rutakm, find con type=ruta) vuelven con su ubicación: el mojón del MTOP o un punto calculado entre dos. SUDIR los devuelve con latitud y longitud en 0.
- La localidad donde está el punto. La localidad, su identificador y el código postal salen de la ubicación del punto (Javier de Viana 264 está en La Paz, Canelones; SUDIR dice Montevideo). El código postal de una puerta es el de la zona del Correo que la contiene.
- Más formas de escribir. Entiende abreviaturas, apellidos solos, tildes y minúsculas, "s/n", esquinas escritas con "y", barrios y nombres de lugares; SUDIR no encuentra muchas de esas consultas.
- Calles con número que no existe en ese lugar. Si el número existe en la misma calle de otra localidad cercana, se devuelve ese lugar como aproximado (state 2), con su localidad real, nunca como exacto.
- Errores más claros. Donde SUDIR responde con un error 500 (un % en el texto, un limit negativo, tramosCalle sin idCalle, find de esquina sin las dos calles), esta responde 400. Un find con un type desconocido devuelve [] en lugar de una respuesta vacía.
- La inversa en la v0. /api/v0/geocode/reverse devuelve del más cercano al más lejano (SUDIR los devuelve al revés). Fuera de Uruguay no devuelve nada.
- Puntos de otras fuentes. Además de SUDIR, los mojones del MTOP y los centros de ANEP, ASSE y el Ministerio del Interior. Sus identificadores (id) son 1.000.000.000 + su número permanente.
- Capas de polígonos. capasPoligonales ofrece departamentos, localidades y zonas postales del Correo (su id es el código postal). Manzanas, solares y entidades colectivas todavía no.
- Sin puntos de administración. No hay /actuator ni otros puntos de administración. /v2/api-docs devuelve la especificación de esta API.
Servicios
En negrita, los parámetros obligatorios. Los nombres distinguen mayúsculas, como en SUDIR.
GET | /api/v1/geocode/direcUnica | Geocodificar una dirección: la mejor ubicación primero, con coordenadas. q, limit |
GET | /api/v1/geocode/candidates | Candidatos para autocompletar mientras se escribe. Las calles sin coordenadas (usar find después). q, soloLocalidad, limit |
GET | /api/v1/geocode/fuzzyGeocode | Geocodificar con tolerancia a errores de escritura (igual que direcUnica, con más resultados). q, soloLocalidad, limit |
GET | /api/v1/geocode/find | Buscar por identificadores (después del autocompletado). type: calle, calleyportal, esquina, localidad, solar, manzanaysolar, inmueble, ruta, rutaykm, olc. type, idcalle, portal, letra, idcalleEsq, nomvia, localidad, departamento, manzana, solar, inmueble, ruta, km |
GET | /api/v1/geocode/findEsq | Las esquinas de una calle: las calles que la cruzan y el punto de cada cruce. idcalle |
GET | /api/v1/geocode/cruces | Las calles que cruzan una calle dada por su nombre, en una localidad. departamento, localidad, calle, q |
GET | /api/v1/geocode/crucesPorIdCalle | Las calles que cruzan una calle dada por su idCalle. idcalle, q |
GET | /api/v1/geocode/crucesConRadio | Como cruces, solo los cruces a menos de `radio` metros del punto. departamento, localidad, calle, latitud, longitud, radio, q |
GET | /api/v1/geocode/rutakm | Un punto sobre una ruta nacional en un kilómetro (mojón del MTOP o calculado entre dos). ruta, km |
GET | /api/v1/geocode/reverse | Geocodificación inversa: las puertas y los puntos notables más cercanos (hasta 2 × limit). latitud, longitud, limit |
GET | /api/v1/geocode/direcPadron | Las direcciones de un padrón (solares de SUDIR; si no hay, el padrón de Catastro). departamento, localidad, padron, limit |
GET | /api/v1/geocode/direcManzaSolar | La dirección de una manzana y solar. departamento, localidad, manzana, solar, limit |
GET | /api/v1/geocode/direcPuntoNotable | Los puntos notables de un departamento por su nombre. departamento, nombre, limit |
GET | /api/v1/geocode/capasPoligonales | Las capas de polígonos disponibles para el servicio poligono. — |
GET | /api/v1/geocode/poligono | Las direcciones dentro de un polígono de una capa (ver capasPoligonales). capa, id, tipoDirec, limit |
GET | /api/v1/geocode/direcEnPoligono | Las direcciones dentro de un polígono GeoJSON (EPSG:4326). poligono, tipoDirec, limit |
GET | /api/v1/geocode/tramosCalle | Los tramos de una calle como GeoJSON (FeatureCollection). idCalle |
GET, POST | /api/v0/geocode/BusquedaDireccion | Formato del servicio anterior: dirección → resultados con puntoX y puntoY. calle, localidad, departamento |
GET, POST | /api/v0/geocode/SugerenciaCalleCompleta | Formato del servicio anterior: sugerencias de calles para autocompletar. entrada, todos |
GET, POST | /api/v0/geocode/localidades | Formato del servicio anterior: las localidades de un departamento. departamento, alias |
GET, POST | /api/v0/geocode/reverse | Geocodificación inversa (respuesta en el formato v1). latitud, longitud, limit |
Uso
- Abierta y sin clave, como SUDIR (CORS para cualquier sitio).
- Hasta 600 pedidos por minuto desde una misma IP; después responde 429 por un rato.
- Para saber qué organismos la prueban se cuenta, por día, cuántos pedidos llegan de cada sitio (solo el nombre del sitio de
la página que la usa) y de qué programa (sin la versión). No se guardan la IP ni lo que se busca. Si querés que sepamos que sos
vos, mandá la cabecera
X-Cliente: nombre-de-tu-organismo.
Cómo reportar un problema
- Escribinos a ideuy@ide.gub.uy con el asunto "API de direcciones (desarrollo)".
- Mandá la URL completa del pedido, lo que respondió y lo que esperabas (si podés, lo que responde SUDIR con el mismo pedido).
- Si el problema es un dato (una dirección que falta o está mal ubicada), también podés usar "Sugerir una corrección" en el visualizador.
- No mandes datos personales: alcanza con la dirección.