Ich habe zwei Sätze von Polygonen in zwei Tabellen. Die Sätze überlappen sich. Für jedes Polygon in Satz A möchte ich die ID des Polygons in Satz B erhalten, das sich am meisten überlappt. Ich verwende PostgreSQL mit der PostGIS-Erweiterung.
Ich weiß gerade genug über SQL, um zu wissen, dass Sie nur basierend auf True / False-Bedingungen beitreten können. Das wird also nicht funktionieren:
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)))
weil max () nicht in der ON-Klausel enthalten sein kann.
ST_Intersects()
ist ein wahr / falsch-Test, also könnte ich mich dem anschließen, aber Polygone in Satz A überlappen sich oft mit mehr als einem Polygon in Satz B, und ich muss wissen, welches sich am meisten überlappt . ST_Intersects würde vermutlich nur die erste überlappende ID zurückgeben, auf die es gestoßen ist, unabhängig vom Ausmaß der Überlappung.
Dies scheint machbar zu sein, aber es ist mir ein Rätsel. Irgendwelche Gedanken?
quelle
DISTINCT ON
ist neu für mich - sehr praktisch in diesem Zusammenhang.