Tengo dos conjuntos de polígonos en dos tablas. Los conjuntos se superponen entre sí. Para cada polígono en el conjunto A, me gustaría obtener la ID del polígono en el conjunto B que se superpone más. Estoy usando PostgreSQL con la extensión PostGIS.
Sé lo suficiente sobre SQL para saber que solo puedes unirte en base a condiciones verdaderas / falsas. Entonces esto no funcionará:
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)))
porque max () no puede estar en la cláusula ON.
ST_Intersects()
es una prueba de verdadero / falso, por lo que podría unirme a eso, pero los polígonos en el conjunto A a menudo se superponen con más de un polígono en el conjunto B, y necesito saber cuál se superpone más . ST_Intersects presumiblemente solo devolvería la primera ID superpuesta que encontró, independientemente de la extensión de la superposición.
Parece que debería ser factible, pero está más allá de mí. ¿Alguna idea?
fuente
DISTINCT ON
es nuevo para mí, muy útil en este contexto.