Eu quero usar ST_DWithin em dados armazenados na geometria SRID de 4326 e usar metros como parâmetro de distância. É mais eficiente fazer uma conversão (por exemplo, data.geom :: geography) ou uma transformação em um SRID com unidades de metros (por exemplo, ST_Transform (geom, 3857)?
postgis
coordinate-system
st-dwithin
kingzing1
fonte
fonte
Respostas:
Conforme descrito, a resposta é "nenhum", pelos seguintes motivos:
ST_DWithin(geom::geography, %anothergeom, %radius)
. Como a geografia está envolvida, o sistema procurará um índice geográfico (construído em uma esfera, não em um plano) e não o encontrará. Como não possui índice, ele realizará a junção usando varreduras completas das tabelas. Vai ser lento.ST_DWithin(ST_Transform(geom, 2163), %anothergeom, %radius)
. Seus testes não são contra a coluna indexada (geom), mas contra uma função aplicada à coluna (ST_Transform(geom,2163)
) e, novamente, seu índice espacial não será usado. Vai ser lento.Você precisa que sua consulta e seu índice se harmonizem. Se você não deseja alterar a projeção de seus dados, será necessário usar um índice funcional; por exemplo, se você criar um índice de geografia de função, poderá usar uma consulta baseada em geografia:
Ou, no caso de transformação:
O desempenho mais rápido absoluto será se você converter os dados da sua tabela em uma projeção plana (como EPSG: 2163 ), criar um índice espacial e depois usá-lo
ST_DWithin()
no resultado.fonte