FAQ
ArcObjects でレイヤーの「著作権」プロパティを取得/設定する方法

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

概要

レイヤーには「著作権」プロパティがあります。ここでは「著作権」プロパティを取得と設定方法をご紹介いたします。

「著作権」プロパティは直接的にアクセスするインターフェイスがありません。このプロパティは、レイヤーのエクステンションの中から ServerLayerExtension を取得し、このエクステンションのもつ ServerProperties の中でキーが "CopyrightText" であるもの(実際にはインデックス番号が 1 番であるもの)の値として取得できます。 少し込み入った手順で取得することになりますが、他に方法がないため下記サンプル コードを参考に手順を踏んで取得/設定します。

Image

サンプル コード

下記サンプル コードでは最上位のレイヤーを対象としていますが、グループ レイヤーの場合も同様に取得できます。

//-----取得する場合-----
//最上位のレイヤーのエクステンションにアクセス
IMxDocument mxDocument = ArcMap.Document;
IMap map = mxDocument.FocusMap;
ILayerExtensions layerExt = map.get_Layer(0) as ILayerExtensions;

int layerExtCount = 0;
for (layerExtCount = 0; layerExtCount < layerExt.ExtensionCount; layerExtCount++)
{
   if (layerExt.Extension[layerExtCount] is IServerLayerExtension)
   {
      //レイヤーのエクステンションの中から ServerLayerExtension を取得
      IServerLayerExtension serverLayerExtension = layerExt.Extension[layerExtCount] as IServerLayerExtension;

      //ServerProperties を取得
      IPropertySet propSet = serverLayerExtension.ServerProperties;

      //すべてのプロパティの名前と値を取得
      object propName;
      object propValue;
      propSet.GetAllProperties(out propName, out propValue);

      //プロパティの名前と値を列挙子として取得
      IEnumerable&ltobject> enumerable = (IEnumerable&ltobject>)propName;
      IEnumerable&ltobject> enumerable2 = (IEnumerable&ltobject>)propValue;
      var enumrator = enumerable.GetEnumerator();
      var enumrator2 = enumerable2.GetEnumerator();

      while (enumrator.MoveNext())
      {
         enumrator2.MoveNext();
         //著作権が書かれている場合
         if (enumrator.Current.ToString() == "CopyrightText")
         {
            object[] creditName = propValue as object[];
            //著作権欄に書かれているテキストを表示
            MessageBox.Show(creditName[0].ToString());
            break;
         }
         //著作権が書かれていない場合
         else
         {
            MessageBox.Show("著作権の欄は空白です。");
         }
      } 
   }
}

//----設定する場合-----
//最上位のレイヤーのエクステンションにアクセス
IMxDocument mxDocument = ArcMap.Document;
IMap map = mxDocument.FocusMap;
ILayerExtensions layerExt = map.get_Layer(0) as ILayerExtensions;

int layerExtCount = 0;
for (layerExtCount = 0; layerExtCount &it layerExt.ExtensionCount; layerExtCount++)
{
   if (layerExt.Extension[layerExtCount] is IServerLayerExtension)
   {
      //レイヤーのエクステンションの中から ServerLayerExtension を取得
      IServerLayerExtension serverLayerExt = layerExt.Extension[layerExtCount] as IServerLayerExtension;

      //ServerProperties を取得
      IPropertySet propSet = serverLayerExt.ServerProperties;

      //著作権欄に設定したいテキストを設定
      propSet.SetProperty("CopyrightText", "著作権を設定");
      serverLayerExt.ServerProperties = propSet;

      //すべてのプロパティの名前と値を取得
      object propName;
      object propValue;
      propSet.GetAllProperties(out propName, out propValue);

      //著作権の欄に書かれているテキストを表示
      object[] creditName = propValue as object[];
      MessageBox.Show(creditName[1].ToString());
   }
}
'-----取得する場合-----
'最上位のレイヤーのエクステンションにアクセス
Dim mxDocument As IMxDocument = My.ArcMap.Document
Dim map As IMap = MxDocument.FocusMap
Dim layerExt As ILayerExtensions = map.Layer(0)

Dim layerExtCount As Integer = 0
For layerExtCount = 0 To layerExt.ExtensionCount - 1
   If TypeOf (layerExt.Extension(layerExtCount)) Is IServerLayerExtension Then

      'レイヤーのエクステンションの中から ServerLayerExtension を取得
      Dim serverLayerExt As IServerLayerExtension = CType(layerExt.Extension(layerExtCount), IServerLayerExtension)

      'ServerProperties を取得
      Dim propSet As IPropertySet = serverLayerExt.ServerProperties

      'すべてのプロパティの名前と値を取得
      Dim propName As Object = Nothing
      Dim propValue As Object = Nothing
      propSet.GetAllProperties(propName, propValue)

      'プロパティの名前と値を列挙子として取得
      Dim enumerable As IEnumerable(Of Object) = CType(propName, IEnumerable(Of Object))
      Dim enumerable2 As IEnumerable(Of Object) = CType(propValue, IEnumerable(Of Object))
      Dim enumrator = enumerable.GetEnumerator()
      Dim enumrator2 = enumerable2.GetEnumerator()

      Do While enumrator.MoveNext()
         enumrator2.MoveNext()
         
         '著作権が書かれている場合()
         If (enumrator.Current.ToString() = "CopyrightText") Then
            Dim creditName As Object() = CType(propValue, Object())
            
            '著作権欄に書かれているテキストを表示
            MessageBox.Show(creditName(0).ToString())
            Exit Do
         '著作権が書かれていない場合
         Else
            MessageBox.Show("著作権の欄は空白です。")
         End If
      Loop
   End If
Next

'----設定する場合-----
'最上位のレイヤーを取得
Dim mxDocument As IMxDocument = My.ArcMap.Document
Dim map as IMap = mxDocument.FocusMap
Dim layerExt As ILayerExtensions = CType(map.Layer(0), ILayerExtensions)

Dim layerExtCount As Integer = 0
For layerExtCount = 0 To layerExt.ExtensionCount - 1
   If TypeOf (layerExt.Extension(layerExtCount)) Is IServerLayerExtension Then

      'レイヤーのエクステンションの中から ServerLayerExtension を取得
      Dim severLayerExt As IServerLayerExtension = CType(layerExt.Extension(layerExtCount), IServerLayerExtension)

      'ServerProperties を取得
      Dim propSet As IPropertySet = serverLayerExt.ServerProperties

      '著作権欄に設定したいテキストを設定
      propSet.SetProperty("CopyrightText", "著作権を設定")
      serverLayerExt.ServerProperties = propSet

      'すべてのプロパティの名前と値を取得
      Dim propName As Object = Nothing
      Dim propValue As Object = Nothing
      propSet.GetAllProperties(propName, propValue)

      '著作権の欄に書かれているテキストを表示
      Dim creditName As Object() = CType(propValue, Object())
      MessageBox.Show("Credits value: " + creditName(1).ToString())
   End If
Next

メタデータ

機能

種類

製品