Quiero usar ST_DWithin en los datos que se almacenan en la geometría SRID de 4326 y usar metros como parámetro de distancia. ¿Es más eficiente hacer un lanzamiento (por ejemplo, data.geom :: geography) o una transformación a un SRID con unidades de metros (por ejemplo, ST_Transform (geom, 3857)? ¿O ninguno?
postgis
coordinate-system
st-dwithin
kingzing1
fuente
fuente
Respuestas:
Como se describe, la respuesta es "ninguna", por las siguientes razones:
ST_DWithin(geom::geography, %anothergeom, %radius)
. Debido a que la geografía está involucrada, el sistema buscará un índice de geografía (que se basa en una esfera, no en un plano) y no encontrará ninguno. Como no tiene índice, realizará la unión usando escaneos completos de las tablas. Será lentoST_DWithin(ST_Transform(geom, 2163), %anothergeom, %radius)
. Sus pruebas no están en contra de la columna indexada (geom), sino contra una función aplicada a la columna (ST_Transform(geom,2163)
) y, de nuevo, su índice espacial no se utilizará. Será lentoNecesita que su consulta y su índice se armonicen. Si no desea cambiar la proyección de sus datos, deberá usar un índice funcional, por ejemplo, si crea un índice de geografía de función, puede usar una consulta basada en geografía:
O, en el caso de transformación:
El rendimiento más rápido absoluto será si convierte los datos de su tabla en una proyección plana (como EPSG: 2163 ), crea un índice espacial y luego lo utiliza
ST_DWithin()
en el resultado.fuente