/// <summary> /// /// </summary> /// <returns></returns> public virtual bool IsNonNested() { for (int i = 0; i < rings.Count; i++) { LinearRing innerRing = (LinearRing)rings[i]; ICoordinate[] innerRingPts = innerRing.Coordinates; for (int j = 0; j < rings.Count; j++) { LinearRing searchRing = (LinearRing)rings[j]; ICoordinate[] searchRingPts = searchRing.Coordinates; if (innerRing == searchRing) { continue; } if (!innerRing.EnvelopeInternal.Intersects(searchRing.EnvelopeInternal)) { continue; } Coordinate innerRingPt = IsValidOp.FindPointNotNode(innerRingPts, searchRing, graph); Assert.IsTrue(innerRingPt != null, "Unable to find a ring point not a node of the search ring"); bool isInside = CGAlgorithms.IsPointInRing(innerRingPt, searchRingPts); if (isInside) { nestedPt = innerRingPt; return(false); } } } return(true); }
/// <summary> /// /// </summary> /// <param name="innerRing"></param> /// <param name="searchRing"></param> /// <returns></returns> private bool IsInside(LinearRing innerRing, LinearRing searchRing) { ICoordinate[] innerRingPts = innerRing.Coordinates; ICoordinate[] searchRingPts = searchRing.Coordinates; if (!innerRing.EnvelopeInternal.Intersects(searchRing.EnvelopeInternal)) { return(false); } ICoordinate innerRingPt = IsValidOp.FindPointNotNode(innerRingPts, searchRing, graph); Assert.IsTrue(innerRingPt != null, "Unable to find a ring point not a node of the search ring"); bool isInside = CGAlgorithms.IsPointInRing(innerRingPt, searchRingPts); if (isInside) { nestedPt = new Coordinate(innerRingPt); return(true); } return(false); }