API, Backend & Frontend
This commit is contained in:
57
API/normalize.js
Normal file
57
API/normalize.js
Normal file
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* Shared helpers: OSM tags → single-line address, element → pharmacy row.
|
||||
*/
|
||||
|
||||
export function buildAddressFromOsmTags(tags) {
|
||||
if (!tags || typeof tags !== 'object') return '';
|
||||
if (tags['addr:full'] && String(tags['addr:full']).trim()) {
|
||||
return String(tags['addr:full']).trim();
|
||||
}
|
||||
const street = [tags['addr:street'], tags['addr:housenumber']].filter(Boolean).join(' ').trim();
|
||||
const cityLine = [tags['addr:postcode'], tags['addr:city'] || tags['addr:place'] || tags['addr:suburb']]
|
||||
.filter(Boolean)
|
||||
.join(' ')
|
||||
.trim();
|
||||
const parts = [street, cityLine].filter(Boolean);
|
||||
if (parts.length) return parts.join(', ');
|
||||
if (tags['addr:province'] && tags['addr:city']) {
|
||||
return `${tags['addr:city']}, ${tags['addr:province']}`.trim();
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {object} el - Overpass element (node | way | relation with optional center)
|
||||
*/
|
||||
export function osmElementToPharmacy(el) {
|
||||
const tags = el.tags || {};
|
||||
let lat;
|
||||
let lon;
|
||||
if (el.type === 'node' && el.lat != null && el.lon != null) {
|
||||
lat = Number(el.lat);
|
||||
lon = Number(el.lon);
|
||||
} else if (el.center && el.center.lat != null && el.center.lon != null) {
|
||||
lat = Number(el.center.lat);
|
||||
lon = Number(el.center.lon);
|
||||
}
|
||||
|
||||
const name = tags.name || tags.brand || tags.operator || null;
|
||||
let address = buildAddressFromOsmTags(tags);
|
||||
if (!address && tags['addr:country']) {
|
||||
address = tags['addr:city'] || tags['addr:place'] || '';
|
||||
}
|
||||
if (!address && name) {
|
||||
address = `OpenStreetMap (no address tags; id ${el.type}/${el.id})`;
|
||||
}
|
||||
|
||||
const phone =
|
||||
tags.phone || tags['contact:phone'] || tags['contact:mobile'] || tags['contact:whatsapp'] || null;
|
||||
|
||||
return {
|
||||
name,
|
||||
address: address || null,
|
||||
phone: phone ? String(phone).trim() : null,
|
||||
latitude: Number.isFinite(lat) ? lat : null,
|
||||
longitude: Number.isFinite(lon) ? lon : null,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user