YouTube | Facebook | Twitter  Feed

IPersistStream

2006/11/19 (日)

ArcGIS Engineはレイヤ ファイル(.lyr)を作成できません。なので数値分類などの凡例情報をファイルとして保存するには、マップ ドキュメント(.mxd)を作るしかありません。

と思ったらありましたIPersistStream。あらゆるArcGISのオブジェクトをバイナリファイルで格納できる優れもの。IPersistStreamを持ってるクラスならすべてバイナリ形式で保存できます。

ヘルプによるとIPersistStreamはMicrosoftが提供しているインタフェースだそうだ。

これならArcGIS Engineでシンボルの保存・読み込みもばっちりです。

バイナリ型でClassBreaksRendererを保存

Dim pMemoryBlobStream As IMemoryBlobStream
Set pMemoryBlobStream = New MemoryBlobStream
Dim pObjectStream As IObjectStream
Set pObjectStream = New ObjectStream
Set pObjectStream.Stream = pMemoryBlobStream

Dim pPersistStream As IPersistStream
Dim pPropertySet As IPropertySet
Set pPropertySet = New PropertySet
pPropertySet.SetProperty "ClassBreaksRenderer", pClassBreaksRenderer
Set pPersistStream = pPropertySet
pPersistStream.Save pObjectStream, False
pMemoryBlobStream.SaveToFile “C:\Temp\MyFile.blb”

ファイルからClassBreaksRendererを読み込み

Dim pObjectStream As IObjectStream
Set pObjectStream = New ObjectStream

Dim pMemoryBlobStream As IMemoryBlobStream
Set pMemoryBlobStream = New MemoryBlobStream
pMemoryBlobStream.LoadFromFile "C:\Temp\MyFile.blb"

Dim pFeatureClassName As IFeatureClassName
Dim pPropertySet As IPropertySet
Set pPropertySet = New PropertySet

Dim pPersistStream As IPersistStream
Set pPersistStream = pPropertySet
Set pObjectStream.Stream = pMemoryBlobStream
pPersistStream.Load pObjectStream&

Set pFeatureClassName = pPropertySet.GetProperty("ClassBreaksRenderer")

■出典 ArcGIS Developer Help Online

IPersistStream Interface http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ComponentHelp/esriSystem/IPersistStream.htm

ObjectStream CoClass http://edndoc.esri.com/arcobjects/9.1/default.asp?url=/arcobjects/9.1/ComponentHelp/esriSystem/ObjectStream.htm

関連記事

  • この記事を書いた人

羽田 康祐

伊達と酔狂のGISエンジニア。GIS上級技術者、Esri認定インストラクター、CompTIA CTT+ Classroom Trainer、潜水士、PADIダイブマスター、四アマ。WordPress は 2.1 からのユーザーで歴だけは長い。 代表著書『地図リテラシー入門―地図の正しい読み方・描き方がわかる』 GIS を使った自己紹介はこちら。ESRIジャパン(株)所属、青山学院大学非常勤講師を兼務。発言は個人の見解です。

-プログラミング
-