import fetch from 'node-fetch'; import fs from 'fs'; const overpassUrl = 'https://overpass-api.de/api/interpreter'; const query = `[out:json][timeout:180]; ( node["amenity"="charging_station"]; way["amenity"="charging_station"]; relation["amenity"="charging_station"]; ); out body tags center;`; function hasTrueFalseTag(tags) { return Object.values(tags).some(v => v === 'true' || v === 'false'); } async function main() { console.log('Envoi de la requête Overpass...'); const response = await fetch(overpassUrl, { method: 'POST', body: `data=${encodeURIComponent(query)}`, headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }); if (!response.ok) { throw new Error(`Erreur Overpass: ${response.status} ${response.statusText}`); } const data = await response.json(); const features = []; for (const el of data.elements) { const tags = el.tags || {}; if (!hasTrueFalseTag(tags)) continue; let coords; if (el.type === 'node') { coords = [el.lon, el.lat]; } else if ((el.type === 'way' || el.type === 'relation') && el.center) { coords = [el.center.lon, el.center.lat]; } else { continue; } features.push({ type: 'Feature', geometry: { type: 'Point', coordinates: coords }, properties: { id: el.id, type: el.type, tags: tags } }); } const geojsonObj = { type: 'FeatureCollection', features: features }; fs.writeFileSync('charging_stations_true_false.geojson', JSON.stringify(geojsonObj, null, 2), 'utf8'); console.log(`Fichier GeoJSON écrit avec ${features.length} objets.`); } main().catch(err => { console.error(err); process.exit(1); });