J'ai deux ensembles de polygones dans deux tables. Les ensembles se chevauchent. Pour chaque polygone de l'ensemble A, je voudrais obtenir l'ID du polygone de l'ensemble B qui se chevauche le plus. J'utilise PostgreSQL avec l'extension PostGIS.
Je sais juste assez de choses sur SQL pour savoir que vous ne pouvez adhérer qu'en fonction de conditions vraies / fausses. Donc ça ne marchera pas:
SELECT
a.id as a_id,
b.id as b_id,
FROM
a
JOIN
b
ON
max(ST_Area(ST_Intersection(a.geom, b.geom)))
car max () ne peut pas être dans la clause ON.
ST_Intersects()
est un test vrai / faux, donc je pourrais me joindre à cela, mais les polygones de l'ensemble A se chevauchent souvent avec plus d'un polygone de l'ensemble B, et j'ai besoin de savoir lequel se chevauche le plus . ST_Intersects retournerait probablement le premier ID de chevauchement rencontré, quelle que soit l'étendue du chevauchement.
Cela semble être réalisable, mais cela me dépasse. Des pensées?
DISTINCT ON
est nouveau pour moi - très pratique dans ce contexte.