多LineSegment分割LinearRing:递归函数调用困惑及代码求助
多条切割线分割LinearRing的递归实现问题
我想用多条线把一个LinearRing分割成多个LinearRing,预期得到LinearRing集合。目前单条线切割多边形已经能实现,但多条线切割的逻辑搞不定——每次用当前线把当前多边形切成两部分时,要把原多边形从结果里移除,这部分处理起来很复杂。现在卡在递归函数的调用上,以下是我写的代码。
主函数
static void Main(string[] args) { Coordinate c22 = new Coordinate(2889.0, 1277.0); Coordinate c23 = new Coordinate(2894.0, 1288.0); Coordinate c24 = new Coordinate(2901.0, 1284.0); Coordinate c25 = new Coordinate(2909.0, 1289.0); Coordinate c26 = new Coordinate(2916.0, 1281.0); Coordinate c27 = new Coordinate(2912.0, 1270.0); Coordinate c28 = new Coordinate(2906.0, 1275.0); Coordinate c29 = new Coordinate(2898.0, 1273.0); LinearRing outerBoundary = new LinearRing(new Coordinate[] { c22, c23, c24, c25, c26, c27, c28, c29, c22 }); List<LineString> lines = new List<LineString>(); Coordinate p30 = new Coordinate(2892.0, 1270.0); Coordinate p31 = new Coordinate(2900.0, 1294.0); LineString ln1 = new LineString(new Coordinate[] { p30, p31 }); lines.Add(ln1); Coordinate p32 = new Coordinate(2909.0, 1268.0); Coordinate p33 = new Coordinate(2907.0, 1294.0); LineString ln2 = new LineString(new Coordinate[] {p32, p33}); lines.Add(ln2); Coordinate p34 = new Coordinate(2886.0, 1286.0); Coordinate p35 = new Coordinate(2922.0, 1278.0); LineString ln3 = new LineString(new Coordinate[] {p34, p35}); lines.Add(ln3); Coordinate p36 = new Coordinate(2883.0, 1281.0); Coordinate p37 = new Coordinate(2923.0, 1273.0); LineString ln4 = new LineString(new Coordinate[] {p36, p37}); lines.Add(ln4); Geometry polygons = CookieCutter(outerBoundary, new List<LineString>() { ln1, ln2, ln3, ln4 }); }
递归函数(此处是卡点)
public static Geometry CookieCutter(LinearRing polygon, List<LineString> cuttingEdges, Geometry pieces = null) { if (pieces == null) { pieces = Polygonize(polygon.Union(cuttingEdges[0])); } foreach (var cuttingEdge in cuttingEdges) { for (int i = 0; i < pieces.NumGeometries; i++) { pieces = pieces.GetGeometryN(i); Geometry newPieces = Polygonize(polygon.Union(cuttingEdge)); // 我知道这里应该对新生成的块调用CookieCutter // 但该怎么实现...? } } }
Polygonize函数
public static Geometry Polygonize(Geometry geometry) { var lines = LineStringExtracter.GetLines(geometry); var polygonizer = new Polygonizer(false); polygonizer.Add(lines); var polys = new List<Geometry>(polygonizer.GetPolygons()); var polyArray = GeometryFactory.ToGeometryArray(polys); return geometry.Factory.BuildGeometry(polyArray); }
内容的提问来源于stack exchange,提问作者dotnetexplorer
相关产品推荐
相关产品推荐

