Más

Agrupar por ubicación dentro de N metros en PostGis

Agrupar por ubicación dentro de N metros en PostGis


En PostGIS, dadas variasLocalizaciónobjetos, cada uno de los cuales se parece a esto:

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

cuál sería la forma más óptima de generar grupos de ubicaciones, con el objetivo final de poder decir queUsuario1ubicaciones compartidas X, Y y Z conUsuario4. "Compartir una ubicación" se define como haber estado a menos de diez metros el uno del otro.

¿Hay alguna manera de hacer algo como un grupo porubicación dentro de X metros?


Si una agrupación por pares es suficiente, una consulta bastante simple y de alto rendimiento será suficiente.

SELECT 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 sus puntos son largos / largos, el uso de una columna de geografía simplificará las cosas como se indicó anteriormente. Si está utilizando coordenadas de Mercator internamente, tendrá que aplicar un factor de escala de 1 / cos (lat) a la distancia para obtener una búsqueda de radio real.


Ver el vídeo: Importar capas Geopackage a Postgres + Postgis