Vamos ver se consigo explicar o que estou tentando fazer. Primeiro, desenvolvi um AddIn for ArcMap que pode levar um recurso selecionado (Polygon) a uma camada, pegar a geometria desse recurso e salvá-lo em um banco de dados do SQL Server. O que eu gostaria de fazer é salvar vários recursos selecionados, não como geometrias individuais (ou seja, uma linha por recurso / geometria), mas como uma "peça de geometria" que contém os polígonos selecionados. Este é o código que tenho até agora:
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 você pode ver, posso obter todos os índices dos recursos selecionados da camada selecionada e obter a geometria, o desafio é "concatenar" todas as geometrias em uma só ... espero que faça sentido :)
Alguma sugestão?
PS ... e se algum de vocês tem uma maneira melhor de percorrer o idList ... por favor me avise :)
ATUALIZAR:
MUITO obrigado a Petr! Seguiu suas instruções e funcionou na primeira tentativa!
Aqui está o código que eu acabei com:
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
}