Una medida realmente fácil, pero no fantástica, es obtener la distancia de Hausdorff entre cada combinación, lo que se hace con la función ST_HausdorffDistance . Usando LineStrings aproximados de su figura, todos se muestran en azul, y la distancia de Hausdorff se muestra para uno de los pares de líneas en rojo:
Y la consulta para ordenar las 6 combinaciones en orden descendente:
WITH data AS (
SELECT 'blue' AS name, 'LINESTRING (60 200, 110 290, 200 320, 330 320, 430 240, 450 200)'::geometry AS geom
UNION SELECT 'black', 'LINESTRING (60 200, 120 270, 235 297, 295 207, 450 200)'::geometry
UNION SELECT 'green', 'LINESTRING (60 200, 280 190, 450 200)'::geometry
UNION SELECT 'red', 'LINESTRING (60 200, 150 210, 257 195, 360 210, 430 190, 450 200)'::geometry)
SELECT a.name || ' <-> ' || b.name AS compare, ST_HausdorffDistance(a.geom, b.geom)
FROM data a, data b WHERE a.name < b.name
ORDER BY ST_HausdorffDistance(a.geom, b.geom) DESC;
compare | st_hausdorffdistance
-----------------+----------------------
blue <-> green | 130
blue <-> red | 125
black <-> blue | 110.102502131467
black <-> green | 104.846289061163
black <-> red | 97.9580173908678
green <-> red | 15.2677257073823
(6 rows)
Por lo tanto, funciona bien para este ejemplo, pero no es una técnica excelente o robusta para agrupar líneas, ya que la única métrica es el único punto con la mayor distancia, en lugar de comparar las diferencias de las líneas completas. Hay métodos mucho mejores, pero serán más complicados.