Den nemmeste og hurtigste måde at gøre det på ville være at gemme koordinaterne som geometry
eller geography
i stedet for adskilte koordinatpar:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Derefter skal du oprette et hovedindeks over denne nye kolonne:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Brug ST_DWithin
til forespørgsel om afstande, som ST_DistanceSphere
eller ST_Distance
vil ikke brug det rumlige indeks!
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);
- Bemærk:den
true
i funktionerneST_DWithin
ogST_Distance
betyder use_spheroid=true , som er standard forgeography
parametre.
Demo:db<>fiddle
Se også:Få alle bygninger inden for en rækkevidde af 5 miles fra angivne koordinater