IPersistStream

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

  • URLをコピーしました!

この記事を書いた人

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