PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Ich möchte in Postgis-Dateien, die weniger als 10.000 Meter groß sind, und ihre berechnete Entfernung anzeigen

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 Funktionen ST_DWithin und ST_Distance bedeutet use_spheroid=true , was der Standardwert für geography ist Parameter.

Demo:db<>fiddle

Siehe auch:Alle Gebäude im Umkreis von 5 Meilen von den angegebenen Koordinaten erhalten