Un index spatial est une structure de données qui organise les entités géographiques selon leur localisation, afin que les requêtes spatiales — « qu'est-ce qui intersecte cette zone ? », « qu'est-ce qui est le plus proche de ce point ? » — puissent être traitées sans parcourir chaque entité du jeu de données. C'est l'équivalent spatial d'un index de base de données sur une colonne.

Ce que c'est et pourquoi c'est important

Sans index, une requête telle que « trouver toutes les failles dans cette feuille de carte » force le système à tester chaque géométrie une par une. Un index spatial restreint la recherche selon une approche en deux phases :

  1. Étape de filtrage — utiliser le rectangle englobant (rectangle englobant minimal) de chaque entité et l'arbre d'index pour écarter rapidement les entités qui ne peuvent pas correspondre.
  2. Étape d'affinage — exécuter le test géométrique exact et coûteux uniquement sur le petit ensemble de candidats restants.

La structure la plus courante est le R-tree, qui regroupe les rectangles englobants voisins dans une hiérarchie de rectangles imbriqués. Les variantes incluent les R*-trees et, dans certaines bases de données, les index GiST ou de type grille/quadtree. Le gain est considérable : des requêtes sur des millions d'entités peuvent passer de secondes à millisecondes.

Exemple concret

Dans PostGIS, vous créez un index spatial avec :

CREATE INDEX idx_units_geom ON geological_units USING GIST (geom);

Une fois l'index créé, une requête ST_Intersects contre un rectangle englobant utilise automatiquement l'index GiST. Les formats de fichiers portent eux aussi des index : le GeoPackage stocke un R-tree, les Shapefiles utilisent un fichier annexe .qix, et le FlatGeobuf intègre un R-tree de Hilbert compacté pour des lectures partielles rapides.

Piège courant

Oublier de créer (ou de reconstruire) l'index. Une table PostGIS fraîchement chargée n'a aucun index spatial tant que vous n'en créez pas un, et les requêtes rampent jusqu'à ce que vous le fassiez. Après des chargements en masse, exécutez aussi ANALYZE afin que le planificateur dispose de statistiques à jour. Notez également que l'index travaille sur les rectangles englobants — il accélère les requêtes mais ne remplace pas le test géométrique exact.

Lectures complémentaires