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)