De gemakkelijkste en snelste manier om dit te doen, is door de coördinaten op te slaan als geometry
of geography
in plaats van gescheiden coördinatenparen:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Maak daarna een gist-index over deze nieuwe kolom:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Gebruik ST_DWithin
voor het opvragen van afstanden, zoals ST_DistanceSphere
of ST_Distance
zal niet gebruik de ruimtelijke index!
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);
- Opmerking:de
true
in de functiesST_DWithin
enST_Distance
betekent use_spheroid=true , wat de standaard is voorgeography
parameters.
Demo:db<>fiddle
Zie ook:Alle gebouwen binnen een bereik van 5 mijl van de opgegeven coördinaten krijgen