レイヤをコピーする方法

 2009/1/21 (水)    

ArcObjectsにはICloneというインタフェースがあり,これを実装しているクラスはIClone::Clone()メソッドによってオブジェクトの複製が行えます。しかし,TOCでレイヤをコピー&貼り付けのように,レイヤの複製を行いたい場合は,レイヤ クラスにIClone実装されていないためが使えません。

その代わりに使用するのがIObjectCopyインタフェース。これはObjectCopyクラスをインスタンス化してIObjectCopy::Copy()メソッドによってオブジェクトの複製を行います。

オブジェクトのコピーなので,FeatureLayerだとシンボルとか選択状態,フィルタ設定などの情報もすべてコピーされます。

ヘルプを読むとIPersistStreamインタフェースを実装しているクラスに適用できるようです。基本的にCoClassと考えれば良いと思います。

サンプルコード

Public Sub CopyLayer()
'マップ ドキュメントを取得
Dim pMxDocument As IMxDocument
Set pMxDocument = ThisDocument

'マップを取得
Dim pMap As IMap
Set pMap = pMxDocument.FocusMap

'コピー元レイヤを取得
Dim pLayer As ILayer
Set pLayer = pMap.Layer(0)

'ObjectCopyの作成
Dim pObjectCopy As IObjectCopy
Set pObjectCopy = New ObjectCopy

'コピーレイヤを作成
Dim pNewLayer As ILayer
Set pNewLayer = pObjectCopy.Copy(pLayer)

'コピーしたレイヤをマップに追加
pMap.AddLayer pNewLayer

End Sub

参考

http://forums.esri.com/Thread.asp?c=93&f=1170&t=259909#798335

Copyright© WINGFIELD since1981 , 2018 All Rights Reserved.