From 211e882fe3d17bfd4e74db2a085222d80adb5bac Mon Sep 17 00:00:00 2001 From: GRZ4NA Date: Sat, 2 Oct 2021 15:41:19 +0200 Subject: [PATCH] searchLocation - retrieve OSM search results --- src/utils/searchLocation.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/utils/searchLocation.js diff --git a/src/utils/searchLocation.js b/src/utils/searchLocation.js new file mode 100644 index 0000000..2fd813d --- /dev/null +++ b/src/utils/searchLocation.js @@ -0,0 +1,24 @@ +import axios from "axios"; + +export const searchLocation = async (query) => { + if (typeof query !== "string") throw new TypeError("Query must be a string"); + const param = encodeURIComponent(query); + const rq = await axios.get(`https://nominatim.openstreetmap.org/search?q=${param}&format=json&polygon_geojson=1&addressdetails=1`); + if (rq.status !== 200) throw new Error(`Server responded with status code ${rq.status}: ${rq.statusText}`); + try { + return rq.data + .map((result) => { + if (!result.lat || !result.lon) return null; + return { + name: result.display_name ?? "Search result", + street: `${result.address?.road + ", " ?? ""}${result.address?.city ?? ""}`, + lat: result.lat, + lon: result.lon, + }; + }) + .filter((result) => result !== null); + } catch (e) { + console.error(e); + return []; + } +};