名称

ST_HausdorffDistance — 返回两个几何图形之间的Hausdorff 距离。

大纲

float ST_HausdorffDistance(geometry g1, geometry g2);

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

描述

返回两个几何图形之间的Hausdorff距离。 Hausdorff距离是对 2 个几何形状相似或不相似程度的度量。

该函数实际上计算“离散Hausdorff距离”。 这是在几何上的离散点计算的Hausdorff距离。 可以指定 densifyFrac 参数,以便在计算离散 Hausdorff 距离之前通过致密分段来提供更准确的答案。 每个段被分成多个等长的子段,其段长度的分数最接近给定的分数。

单位采用几何空间参考系的单位。

[注意]

该算法不等同于标准 Hausdorff距离。 然而,它计算出的近似值对于大部分有用案例都是正确的。 一种重要的情况是线串彼此大致平行且长度大致相等。 这是线路匹配的有用指标。

可用性:1.1.0

示例

Hausdorff distance and minimum distance between two lines. The Hausdorff witness segment from the original illustration is retained and its length is checked against the computed distance.

Code
WITH lines AS (
  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,
         'LINESTRING (52.69230769230769 63.46153846153846,60 100)'::geometry AS hausdorff_segment
)
SELECT round(ST_HausdorffDistance(geomA, geomB)::numeric, 6) AS hausdorff_distance,
       round(ST_Distance(geomA, geomB)::numeric, 6) AS distance,
       round(ST_Length(hausdorff_segment)::numeric, 6) AS witness_length,
       ST_ShortestLine(geomA, geomB) AS distance_segment
FROM lines;
栅格输出
37.262066 | 20.000000 | 37.262066 | LINESTRING(20 70,20 90)
Figure
Geometry figure for visual-st-hausdorffdistance-01

示例:致密化的Hausdorff 距离。

Code
SELECT ST_HausdorffDistance(
            'LINESTRING (130 0,0 0,0 150)'::geometry,
            'LINESTRING (10 10,10 150,130 10)'::geometry,
            0.5);
栅格输出
70
Figure
Geometry figure for visual-st-hausdorffdistance-02

示例:对于每个建筑物,找到最能代表它的地块。 首先,我们要求地块与建筑物几何图形相交。 DISTINCT ON 保证我们每栋建筑仅列出一次。 ORDER BY .. ST_HausdorffDistance 选择与建筑物最相似的地块。

Code
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