AE:读写MapFrame

本文介绍如何使用C#实现PageLayout中的Dataframe保存及读取操作。通过实例代码展示了如何利用IPersistStream接口保存当前Dataframe到文件,并在需要时将Dataframe从文件中读取出来并展示在当前视图中。此外还提供了Dataframe的平移与缩放方法。

【注】:IPersistStream接口的类的对象进行保存和读取,如Element,Map等等,当然猜想IPersistStream能够实现读取Excel表,但还没结果。

 

如下用C#实现PageLayout保存和读取Dataframe 代码:

  

IActiveView pActiveView = null;
IPageLayout pPagelayout = null;
IPageLayoutControl pPageCtrl = null;

IMap pMap;

IGraphicsContainer pGraphicsContainer = null;

ITransform2D pTransform2D = null;//图形平移、缩放接口

pPageCtrl   = axPageLayoutControl1.Object as IPageLayoutControl;
pPagelayout = pPageCtrl.PageLayout;
pActiveView = pPagelayout as IActiveView;
pMap = pActiveView.FocusMap;
           

pGraphicsContainer   = pActiveView.GraphicsContainer;

IEnvelope pEnvBound = pMapFrame.Geometry.Envelope;

 

IMemoryBlobStream pMemoryBlobStream = null;
IElement pMapFrame = null;
IObjectStream pObjectStream = null;
IPersistStream pPersistStream = null;
IFrameElement pFrmElement = null;
IElementProperties pElementProperties = null;

 

//保存当前Dataframe至文件

sFramePath = "C://DataFrame.blb";

pFrmElement = pGraphicsContainer.FindFrame(pMap);
pMapFrame = pFrmElement as IElement;
           
pObjectStream = new ObjectStream();
pMemoryBlobStream = new MemoryBlobStream();

pPersistStream = pMapFrame as IPersistStream;
          
pObjectStream.Stream = pMemoryBlobStream;
pPersistStream.Save(pObjectStream, 1);
pMemoryBlobStream.SaveToFile(sFramePath);

 

//读取文件并在当前视图显示

pMemoryBlobStream = new MemoryBlobStream();
pObjectStream = new ObjectStream();
pMapFrame = new MapFrame();
pPersistStream = pMapFrame as IPersistStream;
pElementProperties = pMapFrame as IElementProperties;

pMemoryBlobStream.LoadFromFile(sFramePath);
pObjectStream.Stream = pMemoryBlobStream;
pPersistStream.Load(pObjectStream as IStream);
pElementProperties.Name = "Map1";

//平移、缩放MapFrame

IEnvelope pEnvSubMapFrm= pMapFrame.Geometry.Envelope;

doubled OffsetX = pEnvBound.XMin - pEnvSubMapFrm.XMin;
double dOffsetY = pEnvBound.YMin - pEnvSubMapFrm.YMin;
pTransform2D.Move(dOffsetX, dOffsetY);//平移
IPoint pPtOrigin = new ESRI.ArcGIS.Geometry.Point();
pPtOrigin.PutCoords(pEnvBound.XMin, pEnvBound.YMin);
dTmp = pEnvBound.Width / pEnvSubMapFrm.Width;
pTransform2D.Scale(pPtOrigin, dTmp, 1);//缩放:X方向缩放,Y方向不缩放

pMapFrame.Geometry = pTransform2D as IGeometry;

pGraphicsContainer.AddElement(pMapFrame , 0);
pGraphicsContainer.UpdateElement(pMapFrame );

IGraphicsContainerSelect pGraphicsContainerSelect = pGraphicsContainer as IGraphicsContainerSelect;

pGraphicsContainerSelect.UnselectElement(pMapFrame);
          
pActiveView.Refresh();

 

 

批量按地图系列(正在修改版) ===================== 工具路径 I:\arcgispro工具箱\自制工具箱.atbx\PLCT11 ===================== 参数 布局名称 问题图斑占地示意图 索引图层 问题图斑范围 排除图层 输出文件夹 C:\Users\Administrator\Desktop\新建文件夹 输出前缀 文件名字段 TBBH 输出格式 JPEG 比例尺 300 DPI 150 相交图层 庭院;附房;房屋建筑图斑 选择要参与出图的图层 庭院;附房;房屋建筑图斑;问题图斑范围 ===================== 消息 开始时间: 2025年11月26日 18:19:35 [2025-11-26 18:19:35] INFO: ===== 参数验证 ===== [2025-11-26 18:19:35] INFO: 索引图层: 问题图斑范围 [2025-11-26 18:19:35] INFO: 输出文件夹: C:\Users\Administrator\Desktop\新建文件夹 [2025-11-26 18:19:35] INFO: 文件名字段: TBBH [2025-11-26 18:19:35] INFO: 比例尺: 300.0 [2025-11-26 18:19:35] INFO: DPI: 150 [2025-11-26 18:19:35] INFO: 排除图层: [] [2025-11-26 18:19:35] INFO: 可见图层: ['庭院', '附房', '房屋建筑图斑', '问题图斑范围'] [2025-11-26 18:19:35] INFO: 相交图层: 庭院;附房;房屋建筑图斑 [2025-11-26 18:19:35] INFO: 使用布局: 问题图斑占地示意图 [2025-11-26 18:19:35] INFO: 使用地图: 地图 [2025-11-26 18:19:35] INFO: 找到索引图层: 问题图斑范围 [2025-11-26 18:19:35] INFO: 索引图层的OID字段: OBJECTID [2025-11-26 18:19:35] INFO: 找到相交图层: 庭院 [2025-11-26 18:19:35] INFO: 找到相交图层: 附房 [2025-11-26 18:19:35] INFO: 找到相交图层: 房屋建筑图斑 [2025-11-26 18:19:35] INFO: 找到 10 个有效索引要素 [2025-11-26 18:19:55] INFO: 图层可见性设置完成 [2025-11-26 18:19:55] ERROR: 主函数错误: 'MapFrame' object has no attribute 'mapClipEnabled' Traceback (most recent call last): File "I:\arcgispro工具箱\自制工具箱.atbx\PLCT11.tool\tool.script.execute.py", line 444, in main AttributeError: 'MapFrame' object has no attribute 'mapClipEnabled' 脚本 批量按地图系列(正在修改版) 失败... 执行(PLCT11)失败。 运行 失败,结束时间: 2025年11月26日 18:19:56 (历时: 20.79 秒)
最新发布
11-27
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值