У мене два набори многокутників у двох таблицях. Набори перетинаються один з одним. Для кожного багатокутника в наборі A я хотів би отримати ідентифікацію полігону в наборі B, який він найбільше перекривається. Я використовую PostgreSQL з розширенням PostGIS.
Я знаю досить просто про SQL, щоб знати, що ви можете приєднуватися лише на основі правдивих / хибних умов. Тож це не спрацює:
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)))
тому що max () не може бути в пункті ON.
ST_Intersects()
це істина / неправда тест, так що я міг би приєднатися на що, але багатокутники безлічі А часто перетинаються з більш ніж одного багатокутника в безлічі В, і мені потрібно знати , який з них перекриває більшість . ST_Intersects, ймовірно, просто поверне перший ідентифікатор, що перекривається, на який він натрапив, незалежно від ступеня перекриття.
Це здається, що це має бути спроможним, але це поза мене. Будь-які думки?
DISTINCT ON
для мене нова - дуже зручна в цьому контексті.