名稱

ST_HausdorffDistance — 傳回兩個幾何圖形之間的 Hausdorff 距離。

概要

float ST_HausdorffDistance(geometry g1, geometry g2);

float ST_HausdorffDistance(geometry g1, geometry g2, float densifyFrac);

描述

傳回兩個幾何圖形之間的 Hausdorff 距離。Hausdorff 距離是一種衡量兩個幾何圖形相似或不相似程度的指標。

該函數實際上計算的是「離散 Hausdorff 距離」。這是基於幾何圖形上的離散點計算的 Hausdorff 距離。可以指定 densifyFrac 參數,透過在計算離散 Hausdorff 距離之前對線段進行加密,來提供更精確的答案。每個線段都會被分割成若干個等長子線段,這些子線段的長度比例最接近給定的比例。

單位是幾何圖形的空間參考系統的單位。

[Note]

此演算法不等同於標準 Hausdorff 距離。然而,它計算出的近似值在許多有用的情況下是正確的。一個重要的例子是大致彼此平行,且長度大致相等的線字串。這是一種用於線匹配的有用度量。

可用性:1.5.0

範例

兩條線之間的 Hausdorff 距離(紅色)和距離(黃色)

SELECT ST_HausdorffDistance(geomA, geomB),
       ST_Distance(geomA, geomB)
    FROM (SELECT 'LINESTRING (20 70, 70 60, 110 70, 170 70)'::geometry AS geomA,
                 'LINESTRING (20 90, 130 90, 60 100, 190 100)'::geometry AS geomB) AS t;
 st_hausdorffdistance | st_distance
----------------------+-------------
    37.26206567625497 |          20

範例: 使用加密的 Hausdorff 距離。

SELECT ST_HausdorffDistance(
            'LINESTRING (130 0, 0 0, 0 150)'::geometry,
            'LINESTRING (10 10, 10 150, 130 10)'::geometry,
            0.5);
 ----------------------
          70

範例: 對於每個建築物,找到最能代表它的地塊。首先,我們要求地塊與建築物的幾何圖形相交。DISTINCT ON 保證每個建築物只列出一次。ORDER BY .. ST_HausdorffDistance 選擇與建築物最相似的地塊。

SELECT DISTINCT ON (buildings.gid) buildings.gid, parcels.parcel_id
   FROM buildings
       INNER JOIN parcels
       ON ST_Intersects(buildings.geom, parcels.geom)
   ORDER BY buildings.gid, ST_HausdorffDistance(buildings.geom, parcels.geom);

另請參閱

ST_FrechetDistance