アルゴリズム:ソースポリラインを参照ポリラインに移動します(完全または部分的に)


10

私たちのシステムでは、いくつかのソース行(低精度)を参照行(高精度)に移動したいという要件があります。次の図は、通常の使用例を示しています。赤い線はソース線で、青い線は参照線です。

赤はソース線、青は参照線

この場合、ソース行は部分的に移動され、結果は緑の線が示すようになります。

結果1を移動

ソース行を完全に移動する必要がある場合があります。

例2

結果:

結果2を移動

現在、私たちの解決策は、ソースラインのヘッド/エンドポイントをリファレンスラインに投影し、その逆を行い、ソースとリファレンスライン上の投影されたポイントを見つけることです。これらの投影された点を使用して、ソースと参照線の必要な部分を抽出し、それらを新しいものに結合できます。

これはほとんどの場合に機能しますが、この方法が機能しない場合もあります。具体的には、どちらかの線が「C」のような形をしている場合、またはヘッドポイントがエンドポイントに非常に近い場合。次の2つの図はシナリオを示しています。

シェイプラインのようなC

私のアルゴリズムを適用すると、結果が得られます:

結果

現在のアルゴリズムは投影された点を見つけて線を抽出するだけなので、ある意味で理解できます。

私たちが期待したのは次のようなものです:

予期された結果

これを行うには、前のような特殊なケースも処理できるように、より堅牢なアルゴリズムが必要です。私はすべての点を線から別の点に投影し、投影された線の先頭/終了点に最も近い2つの投影点を見つけようとしましたが、うまくいきませんでした。それでも、予期しない結果をもたらすケースを見つけることができます。

誰かが以前に同様の問題に遭遇したことがありますか?同様の仕事をすることができるソフトウェアまたはライブラリがあればそれも素晴らしいでしょう。どんな答えでもいただければ幸いです。


1
ArcGISのトポロジがオブジェクトが一致しているかどうかを確認する方法を確認すると、おそらく役立つでしょう:help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//…段落「クラスター処理」。
イェンス

回答ありがとうございます、@ Jens。しかし、私はそれが私が望むものではないことを恐れています。
mfdev 2013年

これらの線はネットワークを表していますか?それらの間にトポロジー関係はありますか?
julien

ネットワークである必要はなく、トポロジー関係もない可能性があります。
mfdev

回答:


4

私の推定では、エンドケースは多くの場合、機械でプログラムできない例外になると考えられます。私は同様の問題に取り組みましたが、それらには常にある程度の手動編集が必要でした。調整する必要があるのは、ケースによって生成され、作業管理システムでそれらをエンドユーザーに提供する例外です。


これのやや似た例がこちらにあります。vividsolutions.com / jcs JCSは、ジオメトリの統合を自動化するための長い道のりですが、完全にマージできないジオメトリの手動QAも含まれています。 vividsolutions.com/…それから 構築され、QAを可能にし、困難な形状の問題追跡を追加します。
DPierce 2013年

1
すべてのトポロジソリューションはプログラミングによって自動化することはできません。大企業では、このようなソリューションは例と同様に開発されます。このようなソリューションは、融合が大きく、周期的に周期性があり、複雑な輸送ジオメトリが変化率が高いためです。
ルイス2013年

2

このアルゴリズムには、スナップ許容値とターン許容値が必要です(私はすでにスナップ許容値を持っていると思います)。

ヘッドポイントをソース線から参照線に投影します。この投影された点で参照線を分割します。

ヘッドポイントから最初の頂点までソースラインをトラバースして、ソースラインに沿った移動方向を取得します。投影されたソースポイントから次の頂点まで2本の参照線それぞれをトラバースします。進行方向がソースラインのヘッドポイントからの進行方向のターン許容差内にある場合は、アルゴリズムを通常どおり適用しますが、参照ラインのそのセクションのみを使用します。アルゴリズムがソース行の終わりに達した場合は、完了です。そうでない場合は、変換された部分と変換されていない部分(終点を含む)の間のソース行を分割します。

次に、変換されていない部分を取り、終点を元の参照線に投影します。以前と同じ手順を実行します...ソースを終点から最初の頂点までトラバースして、移動方向を見つけます。プロジェクトの終点で参照線を分割し、それぞれを横断して、投影された終点からの移動方向が回転許容値内にあるかどうかを確認します。その場合は、参照線のその部分を使用して、アルゴリズムを通常に適用します。

この時点では、変換されていない部分のみを使用しているため、ヘッドポイントの変換と重複しないことに注意してください。

最後に、必要に応じて、結果の2つのラインピースをマージします。ヘッドポイントは、投影されたヘッドポイントから変換されていないブレークポイントに変換され、次にエンドポイントでは、変換されていないブレークポイントから投影されたエンドポイントに変換されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.