private void ComputeLocation(Coordinate p, Geometry geom) { GeometryType geomType = geom.GeometryType; if (geomType == GeometryType.LineString) { UpdateLocationInfo(Locate(p, (LineString)geom)); } else if (geomType == GeometryType.LinearRing) { UpdateLocationInfo(Locate(p, (LineString)geom)); } else if (geomType == GeometryType.Polygon) { UpdateLocationInfo(Locate(p, (Polygon)geom)); } else if (geomType == GeometryType.MultiLineString) { MultiLineString ml = (MultiLineString)geom; int nCount = ml.NumGeometries; for (int i = 0; i < nCount; i++) { LineString l = ml[i]; UpdateLocationInfo(Locate(p, l)); } } else if (geomType == GeometryType.MultiPolygon) { MultiPolygon mpoly = (MultiPolygon)geom; int nCount = mpoly.NumGeometries; for (int i = 0; i < nCount; i++) { Polygon poly = mpoly[i]; UpdateLocationInfo(Locate(p, poly)); } } else if (geomType == GeometryType.GeometryCollection) { IGeometryEnumerator geomi = new GeometryIterator((GeometryCollection)geom); while (geomi.MoveNext()) { Geometry g2 = geomi.Current; if (g2 != geom) { ComputeLocation(p, g2); } } } }
private static bool ContainsPoint(Coordinate p, Geometry geom) { GeometryType geomType = geom.GeometryType; if (geomType == GeometryType.Polygon) { return(ContainsPointInPolygon(p, (Polygon)geom)); } else if (geomType == GeometryType.MultiPolygon) { MultiPolygon mpoly = (MultiPolygon)geom; int nCount = mpoly.NumGeometries; for (int i = 0; i < nCount; i++) { Polygon poly = mpoly[i]; if (poly != geom) { if (ContainsPoint(p, poly)) { return(true); } } } } else { if (geom.IsCollection) { IGeometryEnumerator geomi = new GeometryIterator((GeometryCollection)geom); while (geomi.MoveNext()) { Geometry g2 = geomi.Current; if (g2 != geom) { if (ContainsPoint(p, g2)) { return(true); } } } } } return(false); }