Eficiencia en PostGIS: objetos cerca del punto: ST_Intersects alrededor del búfer Vs ST_DWithin

Pregunta:

Necesito encontrar todos los edificios en un radio de 25 m desde la ubicación dada. Pensé en 2 quires PostGis que pueden manejar esto, cuando lo ejecuto, ambos dan ejecución al mismo tiempo. Pero quiero saber cuál de ellos es la forma más eficiente.

SELECT *
FROM buildings
WHERE  
ST_Intersects(ST_Buffer(ST_Transform(ST_GeomFromText('POINT(lon lat)', 4326), 2163), 25), ST_Transform(buildings.geom, 2163));
-----------
SELECT *
FROM buildings
WHERE  
ST_DWithin(ST_Transform(ST_GeomFromText('POINT(lon lat)', 4326), 2163), ST_Transform(buildings.geom, 2163), 25);

Respuesta:

Además de lo que ya se dijo:

El problema no es el costo computional de st_transform, sino que eliminará el índice.

Acerca del enfoque st_buffer: no es ST_Intersects lo que es costoso (siempre que tenga un índice de trabajo), es el almacenamiento en búfer.

Entonces, la mejor manera es usar ST_DWithin sin transformación, y asegurarse de que el índice realmente se active. Consulte con Explicar.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım