Gerçekten kolay, ama fantastik olmayan bir önlem, ST_HausdorffDistance fonksiyonu ile yapılan her kombinasyon arasındaki Hausdorff mesafesini elde etmektir . Şeklinizden yaklaşık LineStrings kullanarak, bunların tümü mavi renkte gösterilir ve Hausdorff mesafesi kırmızı çizgi çiftlerinden biri için gösterilir:
Ve 6 kombinasyonu azalan sırada sıralamak için sorgu:
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)
Bu nedenle, bu örnek için iyi çalışıyor, ancak kümelenme hatları için harika veya sağlam bir teknik değil, çünkü tek metrik, tam hatların farklılıklarını karşılaştırmak yerine en büyük mesafeye sahip tek noktadır. Çok daha iyi yöntemler var, ancak daha karmaşık olacaklar.