- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ArcGis 开发笔记 C
ArcObjects 编程方法(六):实现 persistence
关于 persistence
persistence 是将对象的当前状态持久的保存在文件、磁盘等存储媒介的过程。在 ArcGIS
中 persistence 被用来保存文档和模板的当前状态。通过 ArcGIS 的 UI,可以更改地图文
档的众多属性、参数,比如渲染器。当地图保存关闭后,渲染器的实例会释放。当再次打开
地图,由于 persistence 的作用,渲染器会根据保存的状态做预设置,看到和先前一样的
状态。
Structured storage, compound files, documents, and streams
地图文档的保存采用结构化存储技术,结构化存储是实现 persistence 的一种方式。结构
化存储中,采用混合文件模型,文件既包含存储对象又包含流对象,存储对象提供结构并可
以包含其他的存储对象和流对象,而流对象提供存储功能可以存储基于内部结构的任意类型
数据。当流被重新打开时,新对象从流中获取状态信息进行初始化,重新创建之前对象的状
态。
这样,一个单独的混合文件可以当作一个微型文件系统,可以被多个文件指针访问。结构化
存储的优点有:文件渐进式读写、文件结构标准化、容量大。
ArcGIS 采用结构化存储保持程序所有对象的当前状态,结构化存储只能用于非 GIS 数据。
混合文档结构
ArcGIS 采用混合文档结构保存文档 (map 文档、globe 文档)、模板 (map 模板、globe
模板)。当文档被保存,所有文档的对象都保存在混合文档的流中。例如,一个 map 文档
单击“保存”后,MxApplication 创建一个流绑定到现存的.mxd 文件,让后将文档信息保存
到流中。
ArcMap 可以保存多个项:
1、地图集——图层、符号、图形、当前范围、空间引用、渲染器等
2、纸面布局、地图框、地图周边等
3、TOC 状态
4、工具栏的显示状态
5、当前数据窗口、类型、位置和内容
persistence 类
当对象需要保存自己的状态,它必须将自己的成员变量写入流中。当对象中存在引用类型变
量,并且引用的对象支持 persistence,则要求成员对象自己保存当前状态。对象及成员对
象 persist 过程:
第 1 页
ArcGis 开发笔记 C
ObjectStreams
在 persistence 过程中,多个引用可能指向同一个对象,这样对象会被多次复制,多次独
立的保存在流中,ArcObjects 引入 ObjectStreams 解决此类问题。当ArcObjects 对象
进行 persistence 时,创建 stream 的同时,创建 ObjectStream 并与 stream 关联。
ObjectStream 中保存了进行 persist 的对象列表。
当对象第一次被 persist 时,采用一般的方式进行,当对象第二次被 persist 时,
ObjectStream 确保对象不被第二次 persist,而是保存该对象的引用。
实现 persistence 类
创建 persistable 类,需要实现 IPersist 接口和 IPersistStream 接口(或 IPersistVariant
接口)。
IPersistStream 接口和 IPersistVariant 接口的一些功能:
1、获取对象 ID IPersistStream.GetClassID IPersistVariant.ID
2、将对象保存到流 IPersistStream.Save IPersistVariant.Save
3、从流获取数据 IPersistStream.Load IPersistVariant.Load
实现 IPersistVariant 接口
第 2 页
ArcGis 开发笔记 C
实现 IPersistVariant 接口及 ID 属性、Save 方法和 Load 方法
?
1 public sealed class TriangleElementClass: IPersistVariant
原创力文档


文档评论(0)