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();
}