Hãy xem liệu tôi có thể giải thích những gì tôi đang cố gắng làm không. Trước hết tôi đã phát triển một AddIn cho ArcMap có thể lấy một tính năng được chọn (Đa giác) trên một lớp, lấy hình dạng của tính năng đó và lưu nó vào cơ sở dữ liệu SQL Server. Những gì tôi muốn làm là lưu nhiều tính năng được chọn, không phải là hình học riêng lẻ (ví dụ: một hàng cho mỗi tính năng / hình học) mà là một "hình dạng hình học" chứa đa giác được chọn. Đây là mã tôi có cho đến nay:
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
}
Như bạn thấy tôi có thể lấy tất cả các chỉ mục của các tính năng được chọn của lớp đã chọn và lấy hình học, thử thách là "ghép" tất cả các hình học thành một ... hy vọng nó có ý nghĩa :)
Bất kỳ đề xuất?
PS ... và nếu bất kỳ ai trong số các bạn có cách lặp tốt hơn thông qua idList ... vui lòng cho tôi biết :)
CẬP NHẬT:
LỚN nhờ Petr! Làm theo hướng dẫn của bạn và nó đã làm việc trong lần thử đầu tiên!
Đây là mã tôi đã kết thúc với:
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
}