Mam dwa zestawy wielokątów w dwóch tabelach. Zestawy nakładają się na siebie. Dla każdego wielokąta w zestawie A chciałbym uzyskać identyfikator wielokąta w zestawie B, który najbardziej na siebie zachodzi. Używam PostgreSQL z rozszerzeniem PostGIS.
Wiem wystarczająco dużo o SQL, aby wiedzieć, że możesz dołączyć tylko na podstawie warunków prawda / fałsz. Więc to nie zadziała:
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)))
ponieważ max () nie może być w klauzuli ON.
ST_Intersects()
jest testem prawda / fałsz, więc mógłbym się przyłączyć, ale wielokąty w zestawie A często nakładają się z więcej niż jednym wielokątem w zestawie B i muszę wiedzieć, który z nich najbardziej się pokrywa . ST_Intersects prawdopodobnie zwróciłby pierwszy zachodzący na siebie identyfikator, na który natknął się, bez względu na zakres nakładania się.
Wydaje się, że powinno być to wykonalne, ale jest poza mną. jakieś pomysły?
źródło
DISTINCT ON
jest dla mnie nowy - bardzo przydatny w tym kontekście.