ST_HausdorffDistance — 返回两个几何图形之间的Hausdorff距离。
float
ST_HausdorffDistance
(
geometry
g1
, geometry
g2
)
;
float
ST_HausdorffDistance
(
geometry
g1
, geometry
g2
, float
densifyFrac
)
;
返回 Hausdorff距离 在两个几何图形之间。Hausdorff距离是对两个几何图形相似或不相似程度的度量。
该函数实际计算的是“离散Hausdorff距离”。这是在几何图形上的离散点计算的Hausdorff距离。这个
密纹
参数,以便在计算离散Hausdorff距离之前通过加密线段来提供更准确的答案。每个分段被分成多个等长子分段,其分段长度的分段最接近给定分段。
单位是几何图形的空间参考系的单位。
![]() |
|
该算法不等同于标准的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);