Lo he resuelto hoy mismo. Aquí está el código. Una breve explicación pseudocódigo sigue.
ESRI.ArcGIS.Geometry.IGeometryBag pGeometryBag = new GeometryBagClass();
ESRI.ArcGIS.Geometry.IGeometryCollection pGeometryCollection = (IGeometryCollection)pGeometryBag;
ESRI.ArcGIS.Carto.IEnumLayer pEnumLayer; //get all layers in the map
pEnumLayer = pDoc.FocusMap.Layers;
ESRI.ArcGIS.Carto.ILayer pLayer; //create a layer to store looped values of point combobox layers
pLayer = pEnumLayer.Next();
while (pLayer != null)//Get all the features and stick them into the geometry collection
{
ESRI.ArcGIS.Carto.IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;
if (pLayer == statusforselectedlayer)
{
ITable pTable = (ITable)pFeatureLayer.FeatureClass;
List<int> OIDList = new List<int>();
IQueryFilter queryFilter = new QueryFilterClass();
queryFilter.SubFields = pFeatureLayer.FeatureClass.OIDFieldName;
ICursor pCursor = pTable.Search(queryFilter, false);
IRow pRow = null;
while((pRow = pCursor.NextRow()) != null)
{
OIDList.Add(pRow.OID);
}
IFeatureCursor blocksCursor = pFeatureLayer.FeatureClass.GetFeatures(OIDList.ToArray(), false);
IFeature blockFeature = null;
while ((blockFeature = blocksCursor.NextFeature()) != null)
{
pGeometryCollection.AddGeometry(blockFeature.Shape);
}
}
ISpatialIndex spatialIndex = (ISpatialIndex)pGeometryBag;
spatialIndex.AllowIndexing = true;
spatialIndex.Invalidate();
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = pGeometryBag;
ESRI.ArcGIS.Geometry.IEnumGeometry pEnumGeometry = (IEnumGeometry)pGeometryBag;
pEnumGeometry.Reset();
ESRI.ArcGIS.Geometry.IGeometry pGeometry = pEnumGeometry.Next();
List<double> distances = new List<double>();
while (pGeometry != null)
{
IProximityOperator pProximity = (IProximityOperator)pGeometry;
ESRI.ArcGIS.Geometry.IEnumGeometry pEnumGeomBag = (IEnumGeometry)pGeometryBag;
ESRI.ArcGIS.Geometry.IGeometry pGeomBagIterable = pEnumGeomBag.Next();
while (pGeomBagIterable != null)
{
distances.Add(pProximity.ReturnDistance(pGeomBagIterable));
pGeomBagIterable = pEnumGeomBag.Next();
}
pGeometry = pEnumGeometry.Next();
}
El código recorre todas las capas del mapa, toma todas las características de una capa especificada si cumple un determinado criterio y las almacena en un IGeometryBag. A continuación, el código recorre cada IGeometría del IGeometryBag creado y compara cada IGeometría con todas las demás IGeometrías del IGeometryBag, obteniendo la distancia cada vez mediante IProximityOperator. Estas distancias se almacenan en una lista de tipo double llamada distancias .