as-services/libs/common/external-api/nominatim-reverse.js
devthejo d5febb45c8
Some checks failed
/ build (map[dockerfile:./services/tasks/Dockerfile name:tasks]) (push) Failing after 1m25s
/ deploy (push) Has been skipped
/ build (map[dockerfile:./services/files/Dockerfile name:files]) (push) Failing after 1m34s
/ build (map[dockerfile:./services/app/Dockerfile name:app]) (push) Successful in 2m9s
/ build (map[dockerfile:./services/api/Dockerfile name:api]) (push) Failing after 1m42s
/ build (map[dockerfile:./services/web/Dockerfile name:web]) (push) Failing after 1m18s
/ build (map[dockerfile:./services/watchers/Dockerfile name:watchers]) (push) Failing after 1m22s
/ build (map[dockerfile:./services/hasura/Dockerfile name:hasura]) (push) Successful in 2m3s
chore(init): available sources
2025-04-13 10:34:01 +02:00

47 lines
1.2 KiB
JavaScript

const { default: axios } = require("axios")
const qs = require("qs")
const { ctx } = require("@modjo/core")
// see https://nominatim.org/release-docs/latest/api/Reverse/
module.exports = async function nominatimReverse(coords, options = {}) {
const config = ctx.get("config.project")
const { nominatimUrl } = config
const logger = ctx.require("logger")
const [lon, lat] = coords
const search = qs.stringify({
format: "json", // see https://nominatim.org/release-docs/latest/api/Output/
zoom: 18,
...options,
lat,
lon,
})
let data
const url = `${nominatimUrl}/reverse?${search}`
try {
const res = await axios.request({
url,
method: "get",
headers: {
"accept-language": "fr", // RFC1766 ISO639
},
})
if (res.status !== 200) {
logger.error(
{ res, url },
"nominatim server did not answer with a HTTP code 200"
)
}
data = res.data
} catch (e) {
if (e.response?.data)
logger.error(
{ responseData: e.response.data, error: e },
"nominatim reverse failed"
)
else logger.error({ url, error: e }, "nominatim reverse failed")
}
return data
}