FAQ
ArcObjects でレイヤーにアクセスし、データ ソースのパスを調べる方法

ナレッジ番号:5560 | 登録日:2023/07/27 | 更新日:2024/11/21

概要

マップに追加しているレイヤーにアクセスし、データ ソースのパスを取得する方法を示します。

Image

手順

1. 最上位にあるレイヤーの取得

 IMxDocument pMxDocument = ArcMap.Document;
 ILayer pLayer = pMxDocument.FocusMap.get_Layer(0);
Dim pMxDocument As IMxDocument = My.ArcMap.Document
Dim pLayer As ILayer = pMxDocument.FocusMap.Layer(0)

※上記は、ArcMap に追加されている最上位のレイヤーを取得する例です。ArcGIS Engine MapControl 上のレイヤーやそれ以外のレイヤーの取得方法については、「レイヤーへのアクセス」をご参考ください。

2. 取得したレイヤーのタイプ(フィーチャ レイヤー、ラスター レイヤー、Tin レイヤー)に応じた処理を行う

IDataset pDataset;
//フィーチャ レイヤー、またはラスター レイヤーの場合は、ILayer から IGeoDataset へキャスト後、さらに IDataset へキャストを行います。
 if ((pLayer is IFeatureLayer) || (pLayer is IRasterLayer))
{
    IGeoDataset pGeoDataset = (IGeoDataset)pLayer;
    pDataset = (IDataset)pGeoDataset;
}
//Tin レイヤーの場合は、ILayer から ITinLayer へキャスト後、さらに IDataset へキャストを行います。
else if (pLayer is ITinLayer)
{
    ITinLayer pTinLayer = (ITinLayer)pLayer;
    pDataset = (IDataset)pTinLayer.Dataset;
}
else
{
    MessageBox.Show("レイヤーはフィーチャ レイヤー、ラスター レイヤー、Tin レイヤーのいずれかの必要があります。");
    return;
}
Dim pDataset As IDataset
'フィーチャ レイヤー、またはラスタ レイヤーの場合は、ILayer から IGeoDataset へキャスト後、さらに IDataset へキャストを行います。
If (TypeOf pLayer Is IFeatureLayer) Or (TypeOf pLayer Is IRasterLayer) Then
    Dim pGeoDataset As IGeoDataset = pLayer
    pDataset = pGeoDataset
'Tin レイヤーの場合は、ILayer から ITinLayer へキャスト後、さらに IDataset へキャストを行います。
ElseIf (TypeOf pLayer Is ITinLayer) Then
    Dim pTinLayer As ITinLayer = pLayer
    pDataset = pTinLayer.Dataset
Else
    MessageBox.Show("レイヤーはフィーチャ レイヤー、ラスター レイヤー、Tin レイヤーのいずれかの必要があります。")
    Exit Sub
End If

3. レイヤーのデータ ソースのパスを取得

レイヤーのデータソースのパスを取得するには、IWorkspace::PathName プロパティを利用します。

//IDataset から IWorkspace へキャストし、PathName プロパティを取得
IWorkspace pWorkspace = pDataset.Workspace;
MessageBox.Show(pWorkspace.PathName);
'IDataset から IWorkspace へキャストし、PathName プロパティを取得
Dim pWorkspace As IWorkspace = pDataset.Workspace
MessageBox.Show(pWorkspace.PathName)

メタデータ

機能

種類

製品