diff --git a/src/services/DataService.ts b/src/services/DataService.ts index aad0a4b..6f0b190 100644 --- a/src/services/DataService.ts +++ b/src/services/DataService.ts @@ -48,7 +48,7 @@ async function fetchLiveTransactions(periodDays: number): Promise<{ // Seules les transactions avec un profil géo entrent dans le heatmap const geolocated: Transaction[] = []; for (const t of rawTransfers) { - const geo = geoMap.get(t.fromName); + const geo = geoMap.get(t.fromName.toLowerCase()); if (!geo) continue; // pas de profil → exclu du heatmap geolocated.push({ diff --git a/src/services/adapters/CesiumAdapter.ts b/src/services/adapters/CesiumAdapter.ts index 28d6986..03c362c 100644 --- a/src/services/adapters/CesiumAdapter.ts +++ b/src/services/adapters/CesiumAdapter.ts @@ -27,8 +27,8 @@ const HitSchema = z.object({ title: z.string().optional(), city: z.string().optional(), geoPoint: z.object({ - lat: z.number().min(-90).max(90), - lon: z.number().min(-180).max(180), + lat: z.coerce.number().min(-90).max(90), + lon: z.coerce.number().min(-180).max(180), }).optional(), }), }); @@ -58,8 +58,8 @@ export async function resolveGeoByNames( query: { bool: { must: [ - // Champ "title" analysé (lowercase tokens) — title.keyword retourne 0 résultats - { terms: { title: unique } }, + // Champ "title" analysé (lowercase tokens) — doit envoyer en minuscules + { terms: { title: unique.map((n) => n.toLowerCase()) } }, ], filter: [ { exists: { field: 'geoPoint' } }, @@ -86,7 +86,7 @@ export async function resolveGeoByNames( for (const hit of parsed.hits.hits) { const src = hit._source; if (src.geoPoint && src.title) { - result.set(src.title, { + result.set(src.title.toLowerCase(), { name: src.title, city: src.city ?? 'Inconnue', lat: src.geoPoint.lat,