Vamos a ver si puedo explicar lo que estoy tratando de hacer. Primero de todo, he desarrollado un programa de ayuda para ArcMap que puede tomar una función seleccionada (Polígono) en una capa, se agarra la geometría de esa característica, y guardarlo en una base de datos SQL Server. Lo que me gustaría hacer es guardar varias características seleccionadas, no como individuo geometrías (es decir. una fila por cada característica/geometría), sino como una "pieza de geometría", que contiene los polígonos seleccionados. Este es el código que tengo hasta ahora:
IFeatureLayer featureLayer = ArcMap.Document.CurrentContentsView.SelectedItem as IFeatureLayer;
if (featureLayer != null)
{
IFeatureSelection featSel = featureLayer as IFeatureSelection;
IEnumIDs idList = featSel.SelectionSet.IDs;
int index = idList.Next();
List<int> indexes = new List<int>();
while (index != -1)
{
indexes.Add(index);
index = idList.Next();
}
IFeatureClass featureClass = featureLayer.FeatureClass;
IFeature feature = featureClass.GetFeature(indexes[0]);
IGeometry geometry = feature.Shape as IGeometry;
// Save to database
}
Como se puede ver que puedo conseguir todos los índices de las características seleccionadas de la capa seleccionada y obtener la geometría, el reto es "concatenar" todas las geometrías en una sola...la esperanza tiene sentido :)
Alguna sugerencia?
P. S ...y si alguno de ustedes tiene una mejor manera de recorrer la idList...por favor, hágamelo saber :)
ACTUALIZACIÓN:
Un GRAN agradecimiento a Petr! Seguido sus instrucciones y funcionó en el primer intento!
Aquí está el código que terminó con:
IFeatureSelection featSel = featureLayer as IFeatureSelection;
if (featSel.SelectionSet.Count > 0)
{
ITopologicalOperator resultPolygon = new Polygon() as ITopologicalOperator;
IGeometryCollection geometriesToUnion = new GeometryBag() as IGeometryCollection;
ICursor cursor;
featSel.SelectionSet.Search(null, false, out cursor);
IFeatureCursor featureCursor = cursor as IFeatureCursor;
IFeature feature;
while ((feature = featureCursor.NextFeature()) != null)
{
geometriesToUnion.AddGeometry(feature.Shape as IGeometry);
}
resultPolygon.ConstructUnion(geometriesToUnion as IEnumGeometry);
// Save resultPolygon to a database
}