Qual é a maneira correta de calcular a diferença entre duas camadas? Eu tentei usar a seguinte abordagem:
SELECT ST_Difference(river.geom, lakes.geom)
FROM river LEFT JOIN lakes ON ST_Intersects(river.geom, lakes.geom)
Mas na saída, perco as geometrias da river
camada que não cruzam nenhuma geometria lakes
. Parece que a junção esquerda não funciona conforme o esperado.
Atualmente, estou usando outra abordagem, mas não tenho certeza se isso está correto:
SELECT ST_Difference(river.geom, lakes.geom)
FROM river JOIN lakes ON ST_Intersects(river.geom, lakes.geom)
UNION
SELECT river.geom
FROM river JOIN lakes ON NOT ST_Intersects(river.geom, lakes.geom)
postgis
attribute-joins
drnextgis
fonte
fonte
O problema aqui não é a junção esquerda, está funcionando como esperado. Mas quando a consulta chega a um rio que não se cruza com um lago, ela alimenta a função ST_Difference com NULL como o segundo argumento que parece retornar nulo.
/ Nicklas
fonte