--- name: nominatim_reverse_geocode kind: function lang: kt domain: infra version: "1.0.0" purity: impure signature: "fun nominatimReverseGeocode(lat: Double, lon: Double, lang: String = \"es\"): GeocodedLocation" description: "Reverse geocoding usando Nominatim (OpenStreetMap). Convierte coordenadas lat/lon a una dirección estructurada (calle, ciudad, país, etc.) para Android/Kotlin sin dependencias externas." tags: [geocoding, nominatim, openstreetmap, location, address, infra, android, kotlin] uses_functions: [] uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: - "org.json.JSONObject" - "java.net.HttpURLConnection" - "java.net.URL" tested: false tests: [] test_file_path: "" file_path: "kotlin/functions/infra/nominatim_reverse_geocode.kt" params: - name: lat desc: "Latitud en grados decimales (-90.0 a 90.0)." - name: lon desc: "Longitud en grados decimales (-180.0 a 180.0)." - name: lang desc: "Código de idioma ISO 639-1 para la respuesta de Nominatim. Por defecto \"es\" (español)." output: "GeocodedLocation con los campos normalizados: displayName, street, houseNumber, neighbourhood, city, state, country, postcode, lat, lon, osmType, osmId." --- ## Ejemplo ```kotlin val loc = nominatimReverseGeocode(40.4168, -3.7038) println(loc.city) // "Madrid" println(loc.street) // "Calle Mayor" println(loc.country) // "España" println(loc.displayName) // cadena completa de Nominatim ``` ## Comportamiento - Realiza GET a `https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=...&lon=...&accept-language=...&zoom=18`. - Cabecera `User-Agent: fn_registry/1.0` obligatoria por política de uso de Nominatim. - Timeout de 5 segundos tanto para conexión como para lectura. - Usa solo `java.net.HttpURLConnection` y `org.json.JSONObject` — disponibles en el Android SDK sin dependencias externas. - Resolución de `city`: prueba `address.city` → `address.town` → `address.village` → `""`. - Resolución de `neighbourhood`: prueba `address.neighbourhood` → `address.suburb` → `""`. - Lanza `RuntimeException` si el HTTP status no es 200 o si falla la lectura de la respuesta. ## Notas Función paralela a `nominatim_reverse_geocode_py_infra` pero adaptada para Android/Kotlin. No llamar desde el hilo principal de Android — usar `Dispatchers.IO` o un `ExecutorService`. El campo `zoom=18` maximiza el detalle de la dirección (nivel de número de portal).