public HRURequestFeature(DbGeometry catchmentGeometry, HRURequestFeatureAttributes baseAttributes, int i) { var rings = new List <List <double[]> >(); var catchmentGeometryExteriorRing = catchmentGeometry.ExteriorRing; var exteriorRingCoordinates = GetRingCoordinates(catchmentGeometryExteriorRing); // need to account for interior rings // need to skip geometries with exterior rings I guess rings.Add(exteriorRingCoordinates); for (var j = 1; j <= catchmentGeometry.InteriorRingCount; j++) { var interiorRing = catchmentGeometry.InteriorRingAt(j); var interiorRingCoordinates = GetRingCoordinates(interiorRing); rings.Add(interiorRingCoordinates); } Geometry = new EsriPolygonGeometry { Rings = rings }; Attributes = new HRURequestFeatureAttributes { ObjectID = baseAttributes.ObjectID, QueryFeatureID = i, Area = baseAttributes.Area, Length = baseAttributes.Length }; }
public static Polygon PolygonFromDbGeometry(DbGeometry inp) { if (inp.SpatialTypeName != "Polygon") { throw new ArgumentException(); } var linearRings = new List <LineString>(); // first get the exterior ring var exteriorRing = LineStringFromDbGeometry(inp.ExteriorRing); Check.Require(exteriorRing.IsLinearRing(), "We expect the exterior ring to be a Linear Ring for this to be a polygon!"); linearRings.Add(exteriorRing); // then get any interior rings for (var i = 1; i <= inp.InteriorRingCount; ++i) { linearRings.Add(LineStringFromDbGeometry(inp.InteriorRingAt(i))); } var polygon = new Polygon(linearRings); return(polygon); }