1

アーク マップで選択したすべてのフィーチャを表示できるように、アクティブ ビュー範囲を設定する最善の方法を見つけようとしています。

1.マップにはレイヤーが 1 つしかありません。2.機能は属性でフィルタリングされます。

以下は、私が試したコードです。機能選択セット内の機能をループできるが、アクティブなビュー範囲をズームして選択したものをすべて表示することができない部分に固執しています。

PS: これは、属性テーブルを右クリックして複数の行を選択し、選択したものにズームするのと似ています。

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();
    }
}

前もって感謝します!

4

2 に答える 2