public bool IsNonNested() { BuildQuadtree(); int nCount = rings.Count; for (int i = 0; i < nCount; i++) { LinearRing innerRing = (LinearRing)rings[i]; ICoordinateList innerRingPts = innerRing.Coordinates; IList results = quadtree.Query(innerRing.Bounds); int nResultCount = results.Count; for (int j = 0; j < nResultCount; j++) { LinearRing searchRing = (LinearRing)results[j]; ICoordinateList searchRingPts = searchRing.Coordinates; if (innerRing == searchRing) { continue; } if (!innerRing.Bounds.Intersects(searchRing.Bounds)) { continue; } Coordinate innerRingPt = IsValidOp.FindPointNotNode(innerRingPts, searchRing, graph); Debug.Assert(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); }
private bool IsInside(LinearRing innerRing, LinearRing searchRing) { ICoordinateList innerRingPts = innerRing.Coordinates; ICoordinateList searchRingPts = searchRing.Coordinates; if (!innerRing.Bounds.Intersects(searchRing.Bounds)) { return(false); } Coordinate innerRingPt = IsValidOp.FindPointNotNode(innerRingPts, searchRing, graph); Debug.Assert(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(true); } return(false); }