Cara termudah dan tercepat untuk melakukannya adalah dengan menyimpan koordinat sebagai geometry
atau geography
alih-alih pasangan koordinat yang terpisah:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Setelah itu, buat indeks inti di atas kolom baru ini:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Gunakan ST_DWithin
untuk menanyakan jarak, sebagai ST_DistanceSphere
atau ST_Distance
akan tidak gunakan indeks spasial!
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);
- Catatan:
true
dalam fungsiST_DWithin
danST_Distance
berarti use_spheroid=true , yang merupakan default untukgeography
parameter.
Demo:db<>fiddle
Lihat juga:Mendapatkan semua Bangunan dalam jangkauan 5 mil dari koordinat yang ditentukan