C# 选择多个要素时如何设置视图范围

C# 选择多个要素时如何设置视图范围,c#,arcgis,feature-extraction,arcobjects,arcmap,C#,Arcgis,Feature Extraction,Arcobjects,Arcmap,我试图找出设置活动视图范围的最佳方法,以便能够查看弧形地图上的所有选定要素 1.地图只有一个图层。2.使用属性过滤特征 下面是我尝试过的代码,我可以在特征选择集中循环特征,但无法将活动视图范围设置为缩放以显示所有选定的特征 注意:这类似于在属性表上单击鼠标右键,选择多行,然后缩放到选定的行 private void ZoomToMultipleDGVSelection(List<int> selectedRightIDs) { IMxDocument pMxDoc = Ar

我试图找出设置活动视图范围的最佳方法,以便能够查看弧形地图上的所有选定要素

1.地图只有一个图层。2.使用属性过滤特征

下面是我尝试过的代码,我可以在特征选择集中循环特征,但无法将活动视图范围设置为缩放以显示所有选定的特征

注意:这类似于在属性表上单击鼠标右键,选择多行,然后缩放到选定的行

private void ZoomToMultipleDGVSelection(List<int> selectedRightIDs)
{

    IMxDocument pMxDoc = ArcMap.Document;
    IMap pMap = (IMap)pMxDoc.ActiveView;

    ESRI.ArcGIS.Carto.ILayer layer = GetLayersClass.GetFieldBoundaryLayer;
    if (layer is ESRI.ArcGIS.Carto.IGroupLayer)
    {

        ESRI.ArcGIS.Carto.IGroupLayer groupLayer = layer as    ESRI.ArcGIS.Carto.IGroupLayer;
        ICompositeLayer pCompositeLayer = layer as ICompositeLayer;
        int layers = pCompositeLayer.Count;
        ILayer pLayer = pCompositeLayer.Layer[0];
        IFeatureLayer pFeatureLayer = (IFeatureLayer)pLayer;

        IFeatureSelection pFeatureSelection = (IFeatureSelection)pLayer;
        ISelectionSet pSelectionSet = pFeatureSelection.SelectionSet;

        IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
        IQueryFilter pFilter = new QueryFilterClass();

        foreach(int ID  in selectedRightIDs)
        {
        pFilter.WhereClause = "RightID = " + ID.ToString();

        IFeatureCursor pFeatureCursor = pFeatureClass.Search(pFilter, false);
        IFeature pFeature = pFeatureCursor.NextFeature();

        pFeatureSelection.Add(pFeature);

        }


        //if (pFeature == null)
        //{
        //    System.Windows.Forms.MessageBox.Show("This section doesn't exist");
        //    return;
        //}


        IGeometry pgeom = (IGeometry)pFeature.Shape;
        pMap.SelectByShape(pgeom, null, false);
        IEnvelope pEnv = pgeom.Envelope;
        pMxDoc.ActiveView.Extent = pEnv;
        pMxDoc.ActiveView.Refresh();
    }
}
private void zoomtomultiprightselection(列出selectedRightId)
{
IMxDocument pMxDoc=ArcMap.Document;
IMap pMap=(IMap)pMxDoc.ActiveView;
ESRI.ArcGIS.Carto.ILayer layer=GetLayerClass.GetFieldBoundaryLayer;
if(图层为ESRI.ArcGIS.Carto.IGroupLayer)
{
ESRI.ArcGIS.Carto.IGroupLayer groupLayer=层作为ESRI.ArcGIS.Carto.IGroupLayer;
ICompositeLayer pCompositeLayer=作为ICompositeLayer的层;
int layers=pCompositeLayer.Count;
ILayer pLayer=pCompositeLayer.Layer[0];
IFeatureLayer pFeatureLayer=(IFeatureLayer)播放器;
IFeatureSelection pFeatureSelection=(IFeatureSelection)播放器;
ISelectionSet pSelectionSet=pFeatureSelection.SelectionSet;
IFeatureClass pFeatureClass=pFeatureLayer.FeatureClass;
IQueryFilter pFilter=新的QueryFilterClass();
foreach(selectedRightId中的int ID)
{
pFilter.WhereClause=“RightID=“+ID.ToString();
IFeatureCursor pFeatureCursor=pFeatureClass.Search(pFilter,false);
IFeature pFeature=pFeatureCursor.NextFeature();
pFeatureSelection.Add(pFeature);
}
//如果(pFeature==null)
//{
//System.Windows.Forms.MessageBox.Show(“此部分不存在”);
//返回;
//}
Igometry pgeom=(Igometry)pFeature.Shape;
pMap.SelectByShape(pgeom,null,false);
IENEVELOPE pEnv=pgeom.信封;
pMxDoc.ActiveView.Extent=pEnv;
pMxDoc.ActiveView.Refresh();
}
}

提前谢谢你

更简单的方法可能是

IDocument d = ArcMap.Document as IDocument;
IUID ud = new UIDClass();
ud.Value = "esriArcMapUI.ZoomToSelectedCommand";
ICommandItem ci = d.CommandBars.Find(ud);
ci.Execute();

否则,可以将所有形状添加到GeometryBag中,并将其范围(封套)传递到ActiveView

更简单的方法可能是

IDocument d = ArcMap.Document as IDocument;
IUID ud = new UIDClass();
ud.Value = "esriArcMapUI.ZoomToSelectedCommand";
ICommandItem ci = d.CommandBars.Find(ud);
ci.Execute();

否则,可以将所有形状添加到GeometryBag中,并将其范围(封套)传递到ActiveView

将几何体对象添加到geometrybag,然后调用

pMxDoc.ActiveView.Extent = pGeometryBag.envelope

编辑:刚才注意到前面的答案已经暗示,傻我

将几何体对象添加到geometrybag,然后调用

pMxDoc.ActiveView.Extent = pGeometryBag.envelope
编辑:刚才注意到前面的答案已经暗示,傻我