FAQ
ArcObjects でグラフィックスをフィーチャに変換したい (または、フィーチャをグラフィックスに変換したい)

ナレッジ番号:3311 | 登録日:2023/05/29 | 更新日:2023/08/31

概要

グラフィックスとフィーチャはそれぞれ Geometry オブジェクトで定義できるため、相互に変換することができます。ただしグラフィックスの場合はスタイルを保持するため、それを考慮した処理を行う必要があります。

サンプル コード

グラフィックスからフィーチャに変換する処理

// GraphicsContainer の取得
// この中にマップ内の全てのグラフィックスが格納されています
IMxDocument pMxDocument = ArcMap.Document;
IGraphicsContainer pGraphicsContainer = pMxDocument.ActiveView.GraphicsContainer;

// グラフィックスから変換したフィーチャを格納するためのフィーチャクラスを取得
// ここでは最上位レイヤーのフィーチャクラスを取得
IFeatureLayer pFeatureLayer = (IFeatureLayer)pMxDocument.FocusMap.Layer[0];
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;

// GraphicsContainer 内のグラフィックスを順番に取得
pGraphicsContainer.Reset();
IElement pElement = pGraphicsContainer.Next();

// GraphicsContainer 内にグラフィックスが存在する限り反復
while (pElement != null)
{
    // グラフィックスの種類がポリゴンであれば、フィーチャクラスにフィーチャを追加
    if (pElement.Geometry.GeometryType == esriGeometryType.esriGeometryPolygon)
    {
        // フィーチャを作成
        IFeature pFeature = pFeatureClass.CreateFeature();
        // フィーチャのジオメトリにグラフィックスのジオメトリを設定
        pFeature.Shape = pElement.Geometry;
        // フィーチャを追加
        pFeature.Store();
    }
    // 次のグラフィックスへ
    pElement = pGraphicsContainer.Next();
}

// グラフィックスを全て削除
pGraphicsContainer.DeleteAllElements();
// マップを再描画
pMxDocument.ActivatedView.Refresh();

フィーチャからグラフィックスに変換する処理

//フィーチャを取得
IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, true);
IFeature pFeature = pFeatureCursor.NextFeature();

//フィーチャの数分ループ
while (pFeature != null)
{
    //グラフィックスのスタイルを定義
    //ここでは赤のハッチを設定
    ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
    pSimpleFillSymbol.Style = esriSimpleFillStyle.esriSFSForwardDiagonal;
    IRgbColor pRgbColor;
    pRgbColor = new RgbColorClass();
    pRgbColor.Red = 255;
    pRgbColor.Green = 0;
    pRgbColor.Blue = 0;
    pSimpleFillSymbol.Color = pRgbColor;

    //エレメントを作成
    IFillShapeElement pFillSimpleElement = new ESRI.ArcGIS.Carto.PolygonElementClass();
    pFillSimpleElement.Symbol = pSimpleFillSymbol;
    IElement pElement = (IElement)pFillSimpleElement;

    //エレメントのジオメトリを設定
    pElement.Geometry = pFeature.Shape;

    //エレメントをGraphicsContainer に追加
    pGraphicsContainer.AddElement(pElement, 0);

    // 次のフィーチャへ
    pFeature = pFeatureCursor.NextFeature();
}
//マップの再描画
pMxDocument.ActiveView.Refresh();

参考情報

IGraphicsContainer Interface

メタデータ

種類

製品