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
postgres=# SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry); st_frechetdistance -------------------- 70.7106781186548 (1 row)
SELECT st_frechetdistance('LINESTRING (0 0, 100 0)'::geometry, 'LINESTRING (0 0, 50 50, 100 0)'::geometry, 0.5); st_frechetdistance -------------------- 50 (1 row)