Der einfachste und schnellste Weg wäre, die Koordinaten als geometry
zu speichern oder geography
statt getrennter Koordinatenpaare:
ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);
Erstellen Sie danach einen Gist-Index über diese neue Spalte:
CREATE INDEX idx_data_point ON data USING gist (geog) ;
Verwenden Sie ST_DWithin
zum Abfragen von Entfernungen, als ST_DistanceSphere
oder ST_Distance
wird nicht Verwenden Sie den räumlichen 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);
- Hinweis:der
true
in den FunktionenST_DWithin
undST_Distance
bedeutet use_spheroid=true , was der Standardwert fürgeography
ist Parameter.
Demo:db<>fiddle
Siehe auch:Alle Gebäude im Umkreis von 5 Meilen von den angegebenen Koordinaten erhalten