ST_HausdorffDistance — 2つのジオメトリ間のハウスドルフ距離を返します。基本的にジオメトリが似ているかどうかを計測するものです。単位はジオメトリの空間参照系の単位です。
float ST_HausdorffDistance(
geometry
g1, geometry
g2)
;
float ST_HausdorffDistance(
geometry
g1, geometry
g2, float
densifyFrac)
;
「離散ハウスドルフ距離」とみなすことができる距離基準を計算します。これは、一つのジオメトリの離散点に制限されたハウスドルフ距離です。Hausdorff distanceに関するWikiPedia英語版の記事やMartin Davis note on how Hausdorff Distance calculation was used to prove correctness of the CascadePolygonUnion approach.などを参照して下さい。
densifyFracが指定された際には、この関数は離散ハウスドルフ距離を計算する前に線分への頂点の挿入を行います。densifyFracパラメータは頂点の挿入を行うための小数です。総延長の小数が与えられた値に近くなるように、線分ごとに等しい長さに分割します。
現在の実装では、頂点のみを離散位置としてサポートします。任意の密度でポイントを使用することができるよう拡張されています。 |
このアルゴリズムは標準的なハウスドルフ距離と等価では*ありません*。しかし、使用可能な場面の大部分で正しくなる近似計算がなされています。重要なものに、それぞれが概ね平行で概ね等しい長さのラインストリングがあります。これはラインのマッチングに使う基準です。 |
初出: 1.5.0 - GEOS 3.2.0以上が必要です。
postgis=# SELECT st_HausdorffDistance( 'LINESTRING (0 0, 2 0)'::geometry, 'MULTIPOINT (0 1, 1 0, 2 1)'::geometry); st_hausdorffdistance ---------------------- 1 (1 row)
postgis=# SELECT st_hausdorffdistance('LINESTRING (130 0, 0 0, 0 150)'::geometry, 'LINESTRING (10 10, 10 150, 130 10)'::geometry, 0.5); st_hausdorffdistance ---------------------- 70 (1 row)