Suite

Regrouper par emplacement dans N mètres dans PostGis

Regrouper par emplacement dans N mètres dans PostGis


Dans PostGIS, étant donné plusieursLieuobjets, dont chacun ressemble à ceci :

{ :id => 1, :latitude => 32.4196, :ll_point => "(-10111.1877176122, -5384086.44077608, 3419435.33326163)", :longitude => -90.1076, :updated_at => nil, :user_id => 1 }

quelle serait la manière la plus optimale de générer des groupes d'emplacements, dans le but final de pouvoir dire queUtilisateur1emplacements partagés X, Y et Z avecUtilisateur4. « Partager un emplacement » est défini comme étant à moins de dix mètres l'un de l'autre.

Y a-t-il un moyen de faire quelque chose comme un groupe enemplacement à moins de X mètres?


Si un regroupement par paire est suffisant, une requête assez simple et performante suffira

SELECTIONNER a.id, b.id, st_distance(a.geog, b.geog) FROM pts a JOIN pts b ON ST_DWithin(a.geog, b.geog, %radius)

Si vos points sont lon/lat, l'utilisation d'une colonne géographique simplifiera les choses comme ci-dessus. Si vous utilisez les coordonnées de Mercator en interne, vous devrez appliquer un facteur d'échelle de 1/cos(lat) à la distance pour obtenir une véritable recherche de rayon.


Voir la vidéo: Scaling Postgres Episode 141 Unattended Upgrade. ARM Benchmarks. Exploration. PostGIS Performance