我正在尝试将较小的段与较大的段进行匹配,这些段最可能与以下段相关:相对紧密,相似的方位并且彼此相对。
这是我拥有的数据的典型示例:
在这里,我需要将段652与198969匹配,而使711和707不匹配任何内容。
我一直在寻找不同的方法,尤其是Hausdorff距离(基于此处的答案)。我使用PostGIS进行了计算,但结果却很奇怪:例如,我得到的最短距离是在707和198985之间,而652到198969的距离要比到198985的距离大(我可以在需要时添加查询和结果)。
Hausdorff实际上是解决此问题的正确方法吗?还有其他方法吗?我想到了简单地对我提到的参数(距离,方位等)创建一组检查的方法,但是我担心不得不添加一大堆条件来处理边缘情况或诸如阈值之类的事情面对对方。
更新:我发现了一种似乎可以接受的折衷方法:
- 我首先找到了我要匹配的蓝色部分中10个最接近的黑色部分(使用PostGIS
<->
运算符),它们相距不到10米。 - 然后,我通过找到每个黑色片段上蓝色片段末端的最近点来创建一个新片段(使用
ST_ClosestPoint
),并过滤出长度小于蓝色片段90%的结果(这意味着片段不是面,或者轴承差异大于〜20°) - 然后,我得到按距离和Hausdorff距离(如果有)排序的第一个结果。
可能需要做一些微调,但目前看来可以接受。如果我错过了一些边缘情况,仍在寻找其他方法或其他检查来运行。
1
为什么不仅仅使用(蓝色)线段的端点来识别目标(黑色)线段之间的潜在匹配?当两个端点都接近一个公共目标时,就会发生您要查找的段匹配,这是一个简单的查询。此方法处理由于段端点的位置错误而导致的差异,否则可能很难解决:注意,很短的(蓝色)段的精度要比更长的段差得多。
—
Whuber
是的,我实际上正在按照这些思路进行尝试,我将用详细信息更新问题。
—
Jukurrpa
不确定我是否理解正确,但是您是否尝试过为蓝线创建质心,然后检查它们与最近的线之间的距离,从而使距离最短?
—
西里尔·米哈里琴科
嗨,西里尔(Cyril),我不再致力于这个问题,但是问题还在于,根据蓝色片段的方向以及它们“面向”黑色片段的数量来匹配它们。这意味着在这种情况下,即使711非常接近黑色部分
—
也不