Fonctions spatiales

ST_Intersects

Teste si deux géométries s’intersectent (ont un espace commun).

SELECT a.nom AS ville, b.nom AS region
FROM villes a, regions b
WHERE ST_Intersects(a.geometry, b.geometry);

Retourne TRUE si les géométries se touchent ou se chevauchent.

ST_Overlaps

Teste si les géométries ont un espace en commun mais ne sont pas complètement contenues l’une dans l’autre.

SELECT a.nom, b.nom
FROM regions a, regions b
WHERE a.id < b.id
AND ST_Overlaps(a.geometry, b.geometry);

Les géométries doivent être de même dimension.

ST_Touches

Teste si les géométries ont au moins un point en commun sans que leurs intérieurs s’intersectent.

SELECT a.nom, b.nom
FROM regions a, regions b
WHERE a.id != b.id
AND ST_Touches(a.geometry, b.geometry);

Utile pour trouver les frontières communes.

ST_Within

Teste si la géométrie A est complètement à l’intérieur de B.

SELECT v.nom
FROM villes v, regions r
WHERE r.nom = 'Île-de-France'
AND ST_Within(v.geometry, r.geometry);

Équivalent au masque INSIDE dans SDO_RELATE.

ST_Distance

Calcule la distance entre deux géométries.

SELECT ST_Distance(
    ST_GeometryFromText('POINT(0 0)'),
    ST_GeometryFromText('POINT(3 4)')
) AS distance;

Retourne 5 (distance euclidienne).

Pour des coordonnées géographiques, utiliser des fonctions avec SRID :

SELECT SDO_GEOM.SDO_DISTANCE(
    a.geometry,
    b.geometry,
    0.005,  -- tolérance
    'unit=km'
) AS distance_km
FROM villes a, villes b
WHERE a.nom = 'Paris' AND b.nom = 'Lyon';

ST_GeometryFromText

Crée une géométrie depuis une chaîne de caractères au format WKT (Well-Known Text).

SELECT ST_GeometryFromText(
    'POINT(2.3522 48.8566)',
    8307
) AS geom;

Format WKT courant :

  • POINT(x y)
  • LINESTRING(x1 y1, x2 y2, x3 y3)
  • POLYGON((x1 y1, x2 y2, x3 y3, x1 y1))