Il modo più semplice e veloce per farlo sarebbe memorizzare le coordinate come geometry
o geography
invece di coppie di coordinate separate:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Successivamente, crea un indice Gist su questa nuova colonna:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Usa ST_DWithin
per interrogare le distanze, come ST_DistanceSphere
o ST_Distance
non usa l'indice spaziale!
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);
- Nota:il
true
nelle funzioniST_DWithin
eST_Distance
significa use_spheroid=true , che è l'impostazione predefinita pergeography
parametri.
Demo:db<>fiddle
Vedi anche:Come ottenere tutti gli edifici entro un raggio di 5 miglia dalle coordinate specificate