Nejjednodušší a nejrychlejší způsob, jak to udělat, by bylo uložit souřadnice jako geometry
nebo geography
místo oddělených dvojic souřadnic:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Poté vytvořte hlavní index nad tímto novým sloupcem:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Použijte ST_DWithin
pro dotazování na vzdálenosti jako ST_DistanceSphere
nebo ST_Distance
nebude použijte prostorový 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);
- Poznámka:
true
ve funkcíchST_DWithin
aST_Distance
znamená use_spheroid=true , což je výchozí hodnota progeography
parametry.
Demo:db<>fiddle
Viz také:Získání všech budov v dosahu 5 mil od zadaných souřadnic