PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Voglio visualizzare in postgis file inferiori a 10.000 metri e la loro distanza calcolata

Il modo più semplice e veloce per farlo sarebbe memorizzare le coordinate come geometry o geography invece di coppie di coordinate separate:

ALTER TABLE data ADD COLUMN geog geography (point,4326);
UPDATE data SET geog = ST_MakePoint(lon,lat);

Successivamente, crea un indice Gist su questa nuova colonna:

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Usa ST_DWithin per interrogare le distanze, come ST_DistanceSphere o ST_Distance non usa l'indice spaziale!

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); 
  • Nota:il true nelle funzioni ST_DWithin e ST_Distance significa use_spheroid=true , che è l'impostazione predefinita per geography parametri.

Demo:db<>fiddle

Vedi anche:Come ottenere tutti gli edifici entro un raggio di 5 miglia dalle coordinate specificate