私はClipperLibのC#バージョンのv6.4.2を使用しています。 私はたくさんの正方形がfishnetを構成しています。私も長方形を持っています。 矩形の内側にある四角形のみが返され、部分的に重なり合った結果が得られたいと思います。 被験者は緑色であり、クリップは赤である: ClipperLib長方形の複数の四角形をクリップすると1つの結果が得られます
Iが得る結果は唯一の多角形である灰色/茶色の長方形である:私は完全な15を有することが期待しているであろう
その結果、正方形と13個の四角形の四角形が表示されます。
var startX = 100;
var startY = 250;
const int numPolygons = 10;
var subj = new Polygons(numPolygons * numPolygons);
for (var i = 0; i < numPolygons; i++)
{
for (var j = 0; j < numPolygons; j++)
{
var square = new Polygon(4)
{
new IntPoint(startX, startY),
new IntPoint(startX + 10, startY),
new IntPoint(startX + 10, startY - 10),
new IntPoint(startX, startY - 10)
};
subj.Add(square);
// Moving to the right
startX = startX + 10;
}
// Moving down
startY = startY - 10;
startX = 100;
}
var clip = new Polygons(1);
clip.Add(new Polygon(4));
clip[0].Add(new IntPoint(165, 215));
clip[0].Add(new IntPoint(255, 215));
clip[0].Add(new IntPoint(255, 155));
clip[0].Add(new IntPoint(165, 155));
var solution = new Polygons();
var c = new Clipper.Clipper();
c.AddPaths(subj, PolyType.ptSubject, true);
c.AddPaths(clip, PolyType.ptClip, true);
c.Execute(ClipType.ctIntersection, solution, PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd);
Debug.WriteLine("solution.Count: " + solution.Count);
を上記のコードを実行するとされ、約0.5秒かかった場合:
これは私が使用しているコードです。クリップと被験者が切り替わるような結果が表示されるので、私はそれらを切り替えました。結果は同じですが、今は0.1秒しかかかりません。だから何か余分なことが行われます。私はそれが結果として得られる広場の合併であると思う。
私は結果をマージしたくありません。どうすればそれを防ぐことができますか?それとも、私のコードに問題がありますか?
実際には、私は地理参照ファイルを使用しています。そのうちの1つは220万の正方形があり、これは回転することができますが、これは互いに隣り合っています。ボーダーはたくさんのポイントを持つパーセルボーダーです。 GDAL/GEOSでクリッピングを行うことはできません。 40分後。私はそれをキャンセルする。一度にクリッパーと1人の被験者(正方形)でそれを行うのはわずか3分です。だからパフォーマンスは十分です。私はあなたの答えを受け入れるでしょう。 –
小さな追加:私は 'foreach subject'を' Parallel.ForEach'に変更し、 'System.Collections.Concurrent.ConcurrentBag()'を使ってすべてのソリューションを保存しました。今はわずか52秒です! –
Clipperの最新バージョンであるPaul(まだ開発中ですが、堅牢で高速で、正式リリース以前はあまり変わっていないでしょう)はポリゴンマージがありませんので、必要な作業をしてください... https://sourceforge.net/ p /ポリクリッピング/コード/ HEAD /ツリー/サンドボックス/ Clipper2 /。また、古いClipperのExecuteInternalメソッドのJoinCommonEdges()ステートメントをコメントアウトすることもできます。 –