Eu tenho dois conjuntos de polígonos em duas tabelas. Os conjuntos se sobrepõem. Para cada polígono no conjunto A, gostaria de obter o ID do polígono no conjunto B que mais se sobrepõe. Estou usando o PostgreSQL com a extensão PostGIS.
Eu sei o suficiente sobre SQL para saber que você só pode ingressar com base em condições verdadeiras / falsas. Portanto, isso não vai 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 () não pode estar na cláusula ON.
ST_Intersects()
é um teste verdadeiro / falso, então eu poderia participar disso, mas os polígonos no conjunto A geralmente se sobrepõem a mais de um polígono no conjunto B, e preciso saber qual deles se sobrepõe mais . ST_Intersects presumivelmente retornaria o primeiro ID sobreposto encontrado, independentemente da extensão da sobreposição.
Parece que deve ser possível, mas está além de mim. Alguma ideia?
fonte
DISTINCT ON
é novo para mim - muito útil neste contexto.