WSReverseGeocoding
Reverse geocoding: convierte coordenadas (latitud/longitud) en una dirección legible, reenviando la consulta a Nominatim /reverse y devolviendo su respuesta cruda.
Reverse Geocoding
/apidev/legacy/WSReverseGeocodingLa autenticación viaja en el cuerpo del request dentro del objeto WSAutorizacion. No se usan cabeceras Authorization, X-API-Key ni tenant. El servicio siempre responde HTTP 200; cualquier fallo de negocio llega en el campo Error del envelope, nunca como código 4xx.
El servicio solo opera cuando el parámetro general REVERSE_GEOCODING de la compañía vale "SI". Consume la misma cuota de geocodificación (getciageocoding) que el resto de los servicios de direcciones.
Cuerpo de la solicitud
| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
WSAutorizacion | object | Sí | Bloque de autenticación. |
WSAutorizacion.Guid | string | Sí | GUID de la compañía (API key). Se resuelve a CiaId; si es 0 → Error = "GUID Inválido". |
WSAutorizacion.Usuario | string | Sí | Email del usuario. Se valida en minúsculas y sin espacios. |
WSAutorizacion.Password | string | Sí | Contraseña del usuario de web service. |
WSSDTFiltroReverseGeocoding | object | Sí | Filtro de la consulta. |
WSSDTFiltroReverseGeocoding.latitude | string | Sí | Latitud. Mapeada a &lat= de Nominatim. Vacía → Error = "Debe ingresar latitud y longitud". |
WSSDTFiltroReverseGeocoding.longitude | string | Sí | Longitud. Mapeada a &lon=. Vacía → mismo error. |
WSSDTFiltroReverseGeocoding.format | string | No | "xml" o "json"; cualquier otro valor (o vacío) se fuerza a "json". Mapeado a ?format=. |
WSSDTFiltroReverseGeocoding.accept_language | string | No | Idioma preferido del resultado. Mapeado a &accept_language= solo si no está vacío. |
WSSDTFiltroReverseGeocoding.zoom | number | No | Nivel de detalle. Mapeado a &zoom= solo si es distinto de 0. |
WSSDTFiltroReverseGeocoding.addressdetails | number | No | 0 / 1. Valores > 1 se fuerzan a 0. Mapeado a &addressdetails= solo si es distinto de 0. |
WSSDTFiltroReverseGeocoding.extratags | number | No | 0 / 1. Valores > 1 se fuerzan a 0. Mapeado a &extratags= solo si es distinto de 0. |
WSSDTFiltroReverseGeocoding.namedetails | number | No | 0 / 1. Valores > 1 se fuerzan a 0. Mapeado a &namedetails= solo si es distinto de 0. |
Respuesta
El envelope de salida tiene como raíz WSSDTDatosGeocodingV2.
| Campo | Tipo | Descripción |
|---|---|---|
Error | string | Mensaje de error; vacío cuando la operación es exitosa. |
Salida | string | Cuerpo crudo de la respuesta de Nominatim (/reverse), sin modificar. El formato depende del format solicitado (json/xml). |
Ejemplos de código
- cURL
- JavaScript
- Python
curl -s -X POST "https://$TENANT/apidev/legacy/WSReverseGeocoding" \
-H "Content-Type: application/json" \
-d '{
"WSAutorizacion": {
"Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Usuario": "usuario@empresa.com",
"Password": "contraseña"
},
"WSSDTFiltroReverseGeocoding": {
"latitude": "-34.9058",
"longitude": "-56.1882",
"format": "json",
"addressdetails": 1
}
}'
const res = await fetch(`https://${TENANT}/apidev/legacy/WSReverseGeocoding`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
WSAutorizacion: {
Guid: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
Usuario: 'usuario@empresa.com',
Password: 'contraseña',
},
WSSDTFiltroReverseGeocoding: {
latitude: '-34.9058',
longitude: '-56.1882',
format: 'json',
addressdetails: 1,
},
}),
});
const data = await res.json();
if (data.WSSDTDatosGeocodingV2.Error) {
// manejar el error de negocio (HTTP 200 + Error poblado)
}
import requests
response = requests.post(
f"https://{TENANT}/apidev/legacy/WSReverseGeocoding",
json={
"WSAutorizacion": {
"Guid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"Usuario": "usuario@empresa.com",
"Password": "contraseña",
},
"WSSDTFiltroReverseGeocoding": {
"latitude": "-34.9058",
"longitude": "-56.1882",
"format": "json",
"addressdetails": 1,
},
},
)
data = response.json()
error = data["WSSDTDatosGeocodingV2"]["Error"]
Ejemplo de respuesta
{
"WSSDTDatosGeocodingV2": {
"Error": "",
"Salida": "{\"place_id\":123456,\"licence\":\"Data © OpenStreetMap contributors\",\"lat\":\"-34.9058\",\"lon\":\"-56.1882\",\"display_name\":\"18 de Julio, Centro, Montevideo, Uruguay\",\"address\":{\"road\":\"18 de Julio\",\"suburb\":\"Centro\",\"city\":\"Montevideo\",\"country\":\"Uruguay\",\"country_code\":\"uy\"}}"
}
}
Errores
Todos los errores se devuelven con HTTP 200 y el texto en el campo Error del envelope (WSSDTDatosGeocodingV2.Error), nunca como código 4xx.
Error (campo Error) | Causa |
|---|---|
GUID Inválido | El Guid no resuelve a una compañía válida (CiaId = 0). |
Compañía inválida. | Compañía no encontrada / inactiva. |
URL Inválida | La URL de la API no es válida para la compañía (salvo el usuario admincloud@logicsat.com, que omite este chequeo). |
Debe ingresar latitud y longitud | latitude o longitude vacíos. |
Servicio no contratado. | La compañía no tiene contratado el servicio de geocoding. |
Sin Saldo. Servicio no disponible. Servicio contratado [N] - Cantidad de solicitudes [N] - Saldo [N] | Sin saldo de geocoding disponible. |
Si el parámetro general REVERSE_GEOCODING de la compañía no vale "SI", la autenticación se invalida y la consulta no se ejecuta (Salida vacía). En caso de excepción contra Nominatim, Salida también queda vacía sin poblar Error.