名称

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