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))