名前

ST_FrechetDistance — 二つのジオメトリのフレシェ距離を返します。

概要

float ST_FrechetDistance(geometry g1, geometry g2, float densifyFrac = -1);

説明

両方のジオメトリの離散点への制限を受けたフレシェ距離の計算アルゴリズムの実装はComputing Discrete Fréchet Distanceを基にしています。フレシェ距離は曲線の位置と点の並び順とを考慮に入れた曲線間の類似度を計測するものです。ハウスドルフ距離よりも良いことがしばしばあります。

任意引数densifyFracが指定されると、この関数は、離散フレシェ距離の計算の前に、辺密度を増加させます。densifyFracパラメータは辺の高密度化に使う比率を設定します。それぞれの辺は多数の等長の辺に分割され、分割辺長の合計長に対する比は与えた比率に近くなります。

単位はジオメトリの空間参照系の単位です。

[注記]

現在の実装では、離散位置は、頂点のみに対応しています。任意の密度でポイントを使用することができるよう拡張されています。

[注記]

densityFracに小さい値を指定すると、フレシェ距離の精度が増します。しかし、分割辺数の2乗に比例して計算時間とメモリ利用量が増大します。

GEOSモジュールで実現しています。

Availability: 2.4.0 - GEOS >= 3.7.0が必要です

両方のラインは左から右へと横切っている。最初のラインはまっすぐで、二つ目のラインは中間頂点が上にあり、上がって降りる構造になっている。

Code
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;
出力:
-[ RECORD 1 ]-----+----------------------------
baseline           | LINESTRING(0 0,100 0)
bowed              | LINESTRING(0 0,50 50,100 0)
discrete_distance  | 70.7106781186548
densified_distance | 50
Figure
Geometry figure for visual-st-frechetdistance-01

関連情報

ST_HausdorffDistance