PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Je souhaite afficher dans les fichiers postgis inférieurs à 10 000 mètres et leur distance calculée

Le moyen le plus simple et le plus rapide de le faire serait de stocker les coordonnées en tant que geometry ou geography au lieu de paires de coordonnées séparées :

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

Après cela, créez un index Gist sur cette nouvelle colonne :

CREATE INDEX idx_data_point ON data USING gist (geog) ;

Utiliser ST_DWithin pour interroger les distances, comme ST_DistanceSphere ou ST_Distance ne sera pas utilisez l'index spatial !

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); 
  • Remarque :le true dans les fonctions ST_DWithin et ST_Distance signifie use_spheroid=true , qui est la valeur par défaut pour geography paramètres.

Démo :db<>fiddle

Voir aussi :Obtenir tous les bâtiments à une distance de 5 miles des coordonnées spécifiées