dyomedea/src/lib/osm.ts

49 lines
1.2 KiB
TypeScript
Raw Normal View History

2023-01-03 17:17:12 +00:00
import memoize from 'memoizee';
export const _findAddress = async (
lon: number,
lat: number,
locale: () => string
) => {
try {
const response = await fetch(
`https://nominatim.openstreetmap.org/reverse?lat=${lat}&lon=${lon}&format=jsonv2&addressdetails=1&extratags=1&namedetails=1&accept-language=${locale()}`,
{ headers: { 'User-Agent': 'Dyomedea' } }
);
const data = await response.json();
console.log({ caller: 'findAddress', lon, lat, data });
return data;
} catch (error) {
console.error({ caller: 'findAddress', lon, lat, error });
return {};
}
2023-01-03 17:17:12 +00:00
};
export const findAddress = memoize(_findAddress, {
promise: true,
max: 1000,
maxAge: 36000000,
2023-01-03 17:17:12 +00:00
});
export const getVillageOrTown = (address: any) => {
const citySynonyms = [
'village',
'city',
'town',
'municipality',
'hamlet',
'suburb',
'locality',
];
2023-03-10 22:36:45 +00:00
if (!address || !address.address) return '';
for (let synonym of citySynonyms) {
2023-03-10 22:36:45 +00:00
// console.log({ caller: 'getVillageOrTown', address, synonym });
if (synonym in address?.address) {
return address?.address[synonym];
}
2023-01-03 17:24:38 +00:00
}
return address?.address?.country;
2023-01-03 17:17:12 +00:00
};