私は、小さなセグメントと、それらが最も関連している可能性が高い大きなセグメントとを一致させようと試みています。
これが私が持っているデータの典型的な例です:
ここでは、セグメント652を198969に一致させる必要がありますが、711および707は何にも一致しません。
さまざまな方法、特にハウスドルフ距離(ここの回答に基づいて)を探しました。PostGISを使用して計算しましたが、奇妙な結果が得られます:最短距離は707と198985の間であり、652はたとえば198985よりも198969までの距離が大きいです(必要に応じてクエリと結果を追加できます)。
Hausdorffは実際にこれを解決する正しい方法ですか?他のアプローチはありますか?言及したパラメーター(距離、方位など)の一連のチェックを作成することを考えましたが、エッジケースまたはそれらがどれだけしきい値に達しているかなどを処理するために条件の束をすべて追加する必要があります向かい合っています。
更新:許容できる妥協案と思われる方法を見つけました:
- 最初に
<->
、10メートル以内にある(PostGIS オペレーターを使用して)一致させようとしている青いセグメントから最も近い10個の黒いセグメントを見つけます。 - 次に、それぞれの黒いセグメントの青いセグメントの端に最も近い点を見つけて(を使用して
ST_ClosestPoint
)新しいセグメントを作成し、長さが青いセグメントの90%未満の結果を除外します(セグメントはそうではありません)直面している、またはベアリングの差が〜20°以上であること) - 次に、距離とハウスドルフ距離がある場合、ソートされた最初の結果を取得します。
微調整を行う必要があるかもしれませんが、今のところ許容できる仕事をしているようです。いくつかのエッジケースを見逃した場合に実行する他の方法や追加のチェックを探しています。