public bool Contains(LineairRing lineairRing) { foreach (GeoCoordinate coordinate in lineairRing.Coordinates) { if (!this.Contains(coordinate)) { return(false); } } foreach (GeoCoordinate coordinate in this.Ring.Coordinates) { if (lineairRing.Contains(coordinate)) { return(false); } } foreach (LineString hole in this.Holes) { foreach (GeoCoordinate coordinate in hole.Coordinates) { if (lineairRing.Contains(coordinate)) { return(false); } } } return(true); }
/// <summary> /// Returns true if the given ring is contained in this polygon. /// </summary> /// <param name="lineairRing"></param> /// <returns></returns> public bool Contains(LineairRing lineairRing) { // check if all points are inside this polygon. foreach (var coordinate in lineairRing.Coordinates) { if (!this.Contains(coordinate)) { // a coordinate ouside of this ring can never be part of a contained inner ring. return(false); } } // check if none of the points of this ring are inside the other ring. foreach (var coordinate in this.Ring.Coordinates) { if (lineairRing.Contains(coordinate)) { // a coordinate ouside of this ring can never be part of a contained inner ring. return(false); } } foreach (LineairRing hole in this.Holes) { foreach (var coordinate in hole.Coordinates) { if (lineairRing.Contains(coordinate)) { // a coordinate ouside of this ring can never be part of a contained inner ring. return(false); } } } return(true); }
public void TestLineairRingContainsRing() { LineairRing inner = new LineairRing(new GeoCoordinate(1, 1), new GeoCoordinate(1, 0.2), new GeoCoordinate(0.2, 1), new GeoCoordinate(1, 1)); LineairRing outer = new LineairRing(new GeoCoordinate(0, 0), new GeoCoordinate(2, 0), new GeoCoordinate(2, 2), new GeoCoordinate(0, 2), new GeoCoordinate(0, 0)); Assert.IsTrue(outer.Contains(inner)); }
public void TestLineairRingContainsPoint() { LineairRing ring = new LineairRing(new GeoCoordinate(0, 0), new GeoCoordinate(3, 0), new GeoCoordinate(0, 3), new GeoCoordinate(0, 0)); foreach (GeoCoordinate ringCoordinate in ring.Coordinates) { Assert.IsTrue(ring.Contains(ringCoordinate)); } GeoCoordinate coordinate = new GeoCoordinate(1, 1); Assert.IsTrue(ring.Contains(coordinate)); coordinate = new GeoCoordinate(2, 2); Assert.IsFalse(ring.Contains(coordinate)); coordinate = new GeoCoordinate(-1, 1); Assert.IsFalse(ring.Contains(coordinate)); coordinate = new GeoCoordinate(0, 1); Assert.IsTrue(ring.Contains(coordinate)); coordinate = new GeoCoordinate(1, 0); Assert.IsTrue(ring.Contains(coordinate)); }
/// <summary> /// Returns true if the given ring is contained in this ring. /// </summary> /// <param name="lineairRing"></param> /// <returns></returns> public bool Contains(LineairRing lineairRing) { // check if all points are inside this ring. foreach (var coordinate in lineairRing.Coordinates) { if (!this.Contains(coordinate)) { // a coordinate ouside of this ring can never be part of a contained inner ring. return false; } } // check if none of the points of this ring are inside the other ring. foreach (var coordinate in this.Coordinates) { if (lineairRing.Contains(coordinate)) { // a coordinate ouside of this ring can never be part of a contained inner ring. return false; } } return true; }