标签:
用DotSpatial.Topology进行的测试,即使有NetTopologySuite类库进行测试:
1 Polygon inputGeometry = null; 2 LineString analysisGeoemtry = null; 3 private void button1_Click(object sender, EventArgs e) 4 { 5 var coords = new Coordinate[7]; 6 // Shell Coordinates 7 var coordscheck = new Coordinate[7]; 8 double[] Xs = new double[] { 30, 260, 130, 350, 250, 330, 320, 180, 250, 50, 70, 60, 30, 260 }; 9 double[] Ys = new double[] { 140, 260, 110, 150, 230, 210, 140, 260 }; 10 for (var i = 0; i < Xs.Length / 2; i++) 11 { 12 var x = Xs[i * 2]; 13 var y = Xs[i * 2 + 1]; 14 coords[i] = new Coordinate(x, y); 15 coordscheck[i] = new Coordinate(x, y); 16 } 17 //coordscheck[19] = new Coordinate(coords[0].X, coords[0].Y); 18 //coords[19] = new Coordinate(coords[0].X, coords[0].Y); 19 // Shell Rings 20 var ring = new LinearRing(coords); 21 var gf = new GeometryFactory(); 22 var ringCheck = gf.CreateLinearRing(coordscheck); 23 // Hole Coordinates 24 var coordsholecheck = new Coordinate[4]; 25 var coordshole = new Coordinate[4]; 26 for (var i = 0; i < Ys.Length / 2; i++) 27 { 28 var x = Ys[i * 2]; 29 var y = Ys[i * 2 + 1]; 30 coordshole[i] = new Coordinate(x, y); 31 coordsholecheck[i] = new Coordinate(x, y); 32 } 33 // Hole LinearRing Arrays 34 var hole = new LinearRing(coordshole); 35 var holes = new ILinearRing[1]; 36 var holeCheck = gf.CreateLinearRing(coordsholecheck); 37 var holescheck = new ILinearRing[1]; 38 holes[0] = hole; 39 holescheck[0] = holeCheck; 40 Polygon pg = new Polygon(ring, holes);// 41 var polygonCheck = gf.CreatePolygon(ringCheck, holescheck); 42 var areaCheck = polygonCheck.Area; 43 var area = pg.Area; 44 // 45 inputGeometry = pg; 46 47 double[] Lines = new double[] { 30, 50, 320, 360 }; 48 var coords1 = new Coordinate[2]; 49 var rnd1 = new Random(); 50 var coordscheck1 = new Coordinate[2]; 51 for (var i = 0; i < Lines.Length / 2; i++) 52 { 53 var x = Lines[i * 2]; 54 var y = Lines[i * 2 + 1]; 55 coords1[i] = new Coordinate(x, y); 56 coordscheck1[i] = new Coordinate(x, y); 57 } 58 59 var gf1 = new GeometryFactory(); 60 var lscheck = gf1.CreateLineString(coordscheck1); 61 LineString ls = new LineString(coords1); 62 analysisGeoemtry = ls; 63 intersectionOutput = analysisGeoemtry.Intersection(inputGeometry); 64 this.Invalidate(); 65 } 66 IGeometry intersectionOutput = null; 67 private void Form1_Paint(object sender, PaintEventArgs e) 68 { 69 Graphics gc = this.CreateGraphics(); 70 if (inputGeometry != null) 71 { 72 GraphicsHelper.DrawPolygon(gc, inputGeometry, new SolidBrush(Color.Red), new Pen(new SolidBrush(Color.LightYellow)), false); 73 } 74 if (analysisGeoemtry != null) 75 { 76 GraphicsHelper.DrawLineString(gc, analysisGeoemtry, new Pen(new SolidBrush(Color.Blue))); 77 } 78 if (intersectionOutput != null) 79 { 80 if (intersectionOutput is LineString) 81 { 82 LineString lsr = intersectionOutput as LineString; 83 Pen mp = new Pen(new SolidBrush(Color.Yellow)); 84 mp.Width = 2; 85 GraphicsHelper.DrawLineString(gc, lsr, mp); 86 } 87 if (intersectionOutput is MultiLineString) 88 { 89 MultiLineString mlsr = intersectionOutput as MultiLineString; 90 for (int i = 0; i < mlsr.NumGeometries; i++) 91 { 92 if (mlsr.Geometries[i] is LineString) 93 { 94 LineString lsr = mlsr.Geometries[i] as LineString; 95 Pen mp = new Pen(new SolidBrush(Color.Yellow)); 96 mp.Width = 2; 97 GraphicsHelper.DrawLineString(gc, lsr, mp); 98 } 99 } 100 } 101 } 102 gc.Dispose(); 103 }
标签:
原文地址:http://www.cnblogs.com/yhlx125/p/4547963.html