FAQ
ArcObjects におけるレイヤーへのアクセス

ナレッジ番号:5300 | 登録日:2023/07/26 | 更新日:2023/12/28

概要

レイヤー オブジェクトを取得する方法を示します。すべてのレイヤー オブジェクトは ILayer インタフェースを実装しており、ILayer 型の変数で受け取ることができます。レイヤーは、コンテンツ ウィンドウで選択されているものと、特定の位置に配置されているレイヤーを指定する方法とがあります。

サンプル コード

ArcMap のコンテンツ ウィンドウで選択されたレイヤーの取得

ArcMap のコンテンツ ウィンドウで選択されているレイヤーを取得するには、IMxDocument::SelectedLayer プロパティを使用します。

IMxDocument pMxDocument = ArcMap.Document; //アドインの場合
ILayer pLayer = pMxDocument.SelectedLayer;
Dim pMxDocument As IMxDocument = My.ArcMap.Document 'アドインの場合
Dim pLayer As ILayer = pMxDocument.SelectedLayer

マップ内の特定のレイヤーを取得

マップ内の特定の位置に存在するレイヤーを取得するには、IMap::Layer プロパティを使用します。引数にはレイヤーのインデックス番号を指定します。インデックス番号は、最上位 を 0 として指定します。

IMap pMap = pMxDocument.FocusMap;
ILayer pLayer = pMap.get_Layer(0);
Dim pMap As IMap = pMxDocument.FocusMap
Dim pLayer As ILayer = pMap.Layer(0)

マップ内のレイヤーをすべて取得

マップに含まれるすべてのレイヤーを取得するには IMap::Layers プロパティを使用します。戻り値の IEnumLayer オブジェクトはリスト型です。個々のレイヤー オブジェクトは Next メソッドの戻り値で取得します。また、Next メソッドが参照するカーソル位置を初期位置に戻すには、IEnumLayer::Reset メソッドを実行します。

IEnumLayer pEnumLayer = pMap.get_Layers();
pEnumLayer.Reset();
ILayer pLayer = pEnumLayer.Next();

while(pLayer != null)
{
    MessageBox.Show(pLayer.Name);
    pLayer = pEnumLayer.Next();
}
Dim pEnumLayer As IEnumLayer = pMap.Layers()
pEnumLayer.Reset()
Dim pLayer As ILayer = pEnumLayer.Next()

Do While(Not pLayer is Nothing)
    MessageBox.Show(pLayer.Name)
    pLayer = pEnumLayer.Next()
Loop

IEnumLayer::Layers プロパティの引数を指定して、特定の種類のレイヤーのみ取得することもできます。第1引数にはレイヤーの種類を決めるための UID、第2引数にはグループ内のレイヤも考慮して再帰的にレイヤーを取得するかどうかを設定します。

C#
ESRI.ArcGIS.esriSystem.IUID uid = new ESRI.ArcGIS.esriSystem.UIDClass();
uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}" //IFeatureLayer の場合

VB
Dim uid As ESRI.ArcGIS.esriSystem.IUID = New ESRI.ArcGIS.esriSystem.UIDClass
uid.Value = "{40A9E885-5533-11d0-98BE-00805F7CED21}" 'IFeatureLayer の場合


{6CA416B1-E160-11D2-9F4E-00C04F6BC78E} IDataLayer
{40A9E885-5533-11d0-98BE-00805F7CED21} IFeatureLayer
{E156D7E5-22AF-11D3-9F99-00C04F6BC78E} IGeoFeatureLayer
{34B2EF81-F4AC-11D1-A245-080009B6F22B} IGraphicsLayer
{5CEAE408-4C0A-437F-9DB3-054D83919850} IFDOGraphicsLayer
{0C22A4C7-DAFD-11D2-9F46-00C04F6BC78E} ICoverageAnnotationLayer
{EDAD6644-1810-11D1-86AE-0000F8751720} IGroupLayer

TOCControl で選択されたレイヤーの取得

TOCControl 上で選択されているレイヤーを取得する場合は、ITOCControl2::GetSelectedItem メソッドを使用します。メソッドの第 3 引数に選択したレイヤーが返されます。

IBasicMap map = null;
ILayer layer = null;
Object other = null;
Object index = null;
esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;

axTOCControl1.GetSelectedItem(ref item, ref map, ref layer, ref other, ref index);
Dim pMap As IMap = Nothing
Dim pLayer As ILayer = Nothing
Dim pOther As Object = Nothing
Dim pItem As esriTOCControlItem
Dim pIndex As Object = Nothing

AxTOCControl1.GetSelectedItem(pItem, pMap, pLayer, pOther, pIndex)

メタデータ

種類

製品