var layer = this.MyMap.Layers["MyLayer"] as ArcGISLocalFeatureLayer; FeatureTemplate lineLayerTemplate = null; if (layer.LayerInfo.Templates != null && layer.LayerInfo.Templates.Count > 0) { lineLayerTemplate = layer.LayerInfo.Templates.FirstOrDefault().Value; } var featureSet = new DotSpatial.Data.FeatureSet(DotSpatial.Topology.FeatureType.Line); if (lineLayerTemplate != null && lineLayerTemplate.PrototypeAttributes != null) { foreach (var prototypeAttribute in lineLayerTemplate.PrototypeAttributes) { // the purpose of this is to create the columns that will apper in the shp file featureSet.DataTable.Columns.Add(new DataColumn(prototypeAttribute.Key as String)); } } foreach (var graphic in layer.Graphics) { var newPaths = new List<LineString>(); foreach (var path in (graphic.Geometry as Polyline).Paths) { var vertices = new List<Coordinate>(); for (int i = 0; i < path.Count; i++) { vertices.Add(new Coordinate(path.X,path.Y,path.Z,path.M)); } // LineString is from DotSpatial...like a PolyLine in Runtime var newPath = new LineString(vertices); newPaths.Add(newPath); } // Multiline is from DotSpatial var geom = new MultiLineString(newPaths); var feature = featureSet.AddFeature(geom); feature.DataRow.BeginEdit(); foreach (var attribute in graphic.Attributes) { feature.DataRow[attribute.Key] = attribute.Value; } feature.DataRow.EndEdit(); } featureSet.Projection = ProjectionInfo.FromEpsgCode(layer.SpatialReference.WKID); featureSet.SaveAs(@"C:\shptest.shp",true);
Hi,
The below given snippet may be useful.
IMap pMap = null;
IMxDocument pDoc = null;
pDoc = clsGlobal.pApp.Document as IMxDocument;
pMap = pDoc.FocusMap;
IGraphicsContainer graphicsContainer ;
pMap = pDoc.FocusMap;
graphicsContainer = pMap.Layer[0] as IGraphicsContainer;//Assuming that layer[0] will be a graphic layer
graphicsContainer.Reset();
IElement element = graphicsContainer.Next();
while (element != null)
{
if (element is IPolygonElement)
{
IElement polyElm = element as IElement;
IGeometry geom = polyElm.Geometry;
//add the task to do
}
element = graphicsContainer.Next();
}