Tuesday, 15 January 2019

postgresql - What is difference between ST_DWithin and ST_Distance for proximity search in PostGIS?



I have records stored in a table with latitude/longitude coordinates stored in a geometry field. I want to find all records nearby a user supplied reference point. Note "nearby" probably means less than 100km (possibly even smaller).


Most examples I see use ST_DWithin. Is there a reason you can't use ST_Distance? What is the difference between using ST_DWithin and ST_Distance to do this?


For example:


SELECT name, ST_AsText(coords)
FROM places
WHERE ST_DWithin(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326), 1)

vs


SELECT name, ST_AsText(coords)
FROM places

WHERE ST_Distance(coords, ST_GeomFromText('POINT(-12.5842 24.4944)',4326)) < 1

Answer



ST_Distance is a calculation which must be executed and evaluated on every row. ST_DWithin can use an index, so it's likely to be much faster.


No comments:

Post a Comment

arcpy - Changing output name when exporting data driven pages to JPG?

Is there a way to save the output JPG, changing the output file name to the page name, instead of page number? I mean changing the script fo...