Najłatwiejszym i najszybszym sposobem na to byłoby zapisanie współrzędnych jako geometry
lub geography
zamiast rozdzielonych par współrzędnych:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Następnie utwórz indeks gist dla tej nowej kolumny:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Użyj ST_DWithin
dla zapytań o odległości, jak ST_DistanceSphere
lub ST_Distance
nie użyj indeksu przestrzennego!
SELECT ST_Distance(geog,ST_MakePoint(49.9 ,6.7)::geography,true)
FROM data
WHERE ST_DWithin(geog,ST_MakePoint(49.9,6.7),10000,true);
- Uwaga:
true
w funkcjachST_DWithin
iST_Distance
oznacza use_spheroid=prawda , który jest domyślny dlageography
parametry.
Demo:db<>fiddle
Zobacz też:Zdobywanie wszystkich budynków w zasięgu 5 mil od określonych współrzędnych