Mari kita lihat apakah saya bisa menjelaskan apa yang saya coba lakukan. Pertama-tama saya telah mengembangkan AddIn untuk ArcMap yang dapat mengambil satu fitur yang dipilih (Polygon) pada layer, ambil geometri fitur itu, dan menyimpannya ke database SQL Server. Apa yang ingin saya lakukan adalah menyimpan beberapa fitur yang dipilih, bukan sebagai geometri individu (mis. Satu baris per fitur / geometri) tetapi sebagai satu "potongan geometri" yang berisi poligon yang dipilih. Ini adalah kode yang saya miliki sejauh ini:
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
}
Seperti yang Anda lihat, saya bisa mendapatkan semua indeks dari fitur yang dipilih dari lapisan yang dipilih dan mendapatkan geometri, tantangannya adalah untuk "menggabungkan" semua geometri menjadi satu ... harap masuk akal :)
Ada saran?
PS ... dan jika ada di antara Anda yang memiliki cara yang lebih baik untuk mengulang melalui idList ... beri tahu saya :)
MEMPERBARUI:
Terima kasih banyak untuk Petr! Ikuti instruksi Anda dan itu berhasil pada percobaan pertama!
Inilah kode yang akhirnya saya dapatkan:
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
}