問題タブ [turfjs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Polygons を lineStrings (Plots からのヘッドランド) に分解するアルゴリズム
このポリゴンから、プロットの「枕地」を抽出したいと思います。これは、フィールドをオンにするために使用されるポリゴン (ウィキペディア) の連続した線 (辺) です。多くの場合、フィールドのレイに対して垂直に走る行のみが考慮されますが、ポリゴンのすべての側面が必要です。
ここで、連続する線とは、任意の 2 つの座標間の角度が値 X (たとえば 30 度) よりも大きくない座標の任意のセットを意味します。与えられた例では、結果の枕地は次のようになります。
これを達成しようとする小さなアルゴリズムを作成しました。基本的には、2 つの座標間の角度をチェックし、角度が X 度未満の場合は指定された座標を既存の lineString にプッシュするか、そうでない場合は新しい lineString (枕地) を作成します。 次のGistをチェックしてください
ただし、場合によっては、フィールドの角が丸みを帯びているため、互いに短い距離内にある多くの座標で構成されている場合があります。角が鋭すぎて実際に曲がらないと耕作できない場合でも、相対角度は X の値よりも小さい場合があります。その問題を克服するために、次の座標が最初の座標に対してチェックされるように、座標が近すぎて比較できないたびに増加するインデックスを追加しました。次の Gist を確認してください。
これは、例のような単純なプロットでは機能しますが、次のようなより複雑なプロットでは苦労しています。
ここで、下の枕地は、光学的には鋭い角が与えられているにもかかわらず、右側の枕地と合わせて 1 つの線ストリングとして認識されます。また、右上隅の 2 つの座標は、右の枕地に接続されているはずですが、別の枕地であることがわかりました。したがって、結果は次のようになります。
私が知りたいのは、特定の回転角度が与えられた場合に、ポリゴンを枕地に効率的に分解するアプローチがあるかどうかです。ここにコードのレポを設定し、それが役立つ場合は、ここに多くの例を含むオンライン テスト ページを設定します。