ST_FrechetDistance — 返回两个几何图形之间的 Fréchet 距离。
float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);
基于计算离散 Fréchet 距离,实现计算仅限于两个几何图形的离散点的 Fréchet 距离的算法。 Fréchet 距离是曲线之间相似性的度量,考虑了曲线上点的位置和顺序。 因此它通常比 Hausdorff 距离更好。
当指定可选的 densifyFrac 时,该函数在计算离散 Fréchet 距离之前执行分段致密化。 densifyFrac 参数设置用于致密每个段的分数。 每个段将被分成多个等长的子段,其总长度的分数最接近给定的分数。
单位采用几何空间参考系的单位。
|
|
|
当前的实现仅支持顶点作为离散位置。 这可以扩展到允许使用任意密度的点。 |
|
|
|
我们指定的 densifyFrac 越小,我们获得的 Fréchet 距离就越准确。 但是,计算时间和内存使用量随着子段数量的平方而增加。 |
这个函数是由 GEOS 模块执行的。
可用性:2.4.0 - 需要 GEOS >= 3.7.0
Both lines are traversed from left to right. The first line is straight, while the second bows upward through its middle vertex. The point ordering matters, so keeping both inputs in the same direction makes the comparison clearer.
WITH lines AS (
SELECT 'LINESTRING (0 0,100 0)'::geometry AS baseline,
'LINESTRING (0 0,50 50,100 0)'::geometry AS bowed
)
SELECT baseline AS baseline,
bowed AS bowed,
ST_FrechetDistance(baseline, bowed) AS discrete_distance,
ST_FrechetDistance(baseline, bowed, 0.5) AS densified_distance
FROM lines;