La carte clusterisait depuis bands.geom (un seul point par groupe). Désormais /api/clusters source band_locations : un groupe multi-périodes (ex. Thessaloniki puis Boston) apparaît comme plusieurs points distincts. - migration 010: colonne geom générée (Point,4326) + index GIST sur band_locations (évite le seq-scan sur les requêtes bbox) - /api/clusters: FROM band_locations bl JOIN bands b, bbox via geom && envelope, filtres (pays/statut/genre/année) sur b.*, points issus de bl.lat/lon ; la JSON des clusters porte location_raw + step_label - web parseBandData: expose location_raw + step_label (base pour différencier plus tard un groupe qui a déménagé d'un groupe resté sur place) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
16 lines
634 B
SQL
16 lines
634 B
SQL
-- 010_band_locations_geom.sql
|
|
-- La carte doit clusteriser par LOCALISATION (band_locations), pas par groupe
|
|
-- (bands). band_locations n'avait que lat/lon sans index spatial → seq-scan à
|
|
-- chaque déplacement de carte. On ajoute une colonne geom générée + index GIST,
|
|
-- alignée sur le pattern de la table bands.
|
|
|
|
ALTER TABLE band_locations
|
|
ADD COLUMN IF NOT EXISTS geom geometry(Point, 4326)
|
|
GENERATED ALWAYS AS (
|
|
CASE
|
|
WHEN lat IS NOT NULL AND lon IS NOT NULL
|
|
THEN ST_SetSRID(ST_MakePoint(lon, lat), 4326)
|
|
END
|
|
) STORED;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_bl_geom ON band_locations USING GIST (geom);
|