AE开发笔记(二)制图输出
一、制作mxd模板文件
尽可能在模板图层中标注要素,这样在模板图层中插入要素后,标注可以随之自动显示。
二、打开真实数据要素类
打开真实要素类,获取该要素类和空间参考,以及标注需要的字段索引。
三、打开模板图层要素类
打开模板图层要素类,获取该要素类,并修改其空间参考为真实数据的空间参考,获取标注需要的字段索引。
四、打开模板图mxd文件
打开mxd文件,并修改数据框的空间参考。(2-4步看AE开发笔记(一)空间参考坐标系)
五、初始化模板图层(清空数据源)
//清空模板图中源数据要素类中的要素
ITable m1Table = pFeatureclass as ITable;
m1Table.DeleteSearchedRows(null);
六、判断真实要素类和模板图层要素类是否有ZM值
int pShapeIndex= pzdFeaclass.Fields.FindField("Shape");//真实数据要素类
IGeometryDef pGeometryDef= pFeaclass.Fields.get_Field(pShapeIndex).GeometryDef as IGeometryDef;
int mShapeIndex = mFeatureclass.Fields.FindField("Shape");//模板图层要素类
IGeometryDef mGeometryDef=mFeatureclass.Fields.get_Field(mShapeIndex ).GeometryDef as IGeometryDef;
bool HAS_ZM= false;
if (pGeometryDef.HasZ == mGeometryDef.HasZ && pGeometryDef.HasM ==mGeometryDef.HasM)
{HAS_ZM= true;
}
七、将真实数据插入模板图层要素类中
IQueryFilter sQueryFilter = new QueryFilterClass();
sQueryFilter.WhereClause = "DM = '" + dm + "'";
IFeatureCursor pfeatureCursor = pFeaclass.Search(sQueryFilter, false);//真实数据要素类
IFeature pfeature = null;
IFeatureBuffer mFeatureBuffer = mFeatureclass.CreateFeatureBuffer();//模板图层要素类
IFeatureCursor mFeatureCursor = mFeatureclass.Insert(true);
while((pfeature=pfeatureCursor.NextFeature())!=null)
{string value= pfeature.get_Value(pindex).ToString();if (HAS_ZM == true){pFeatureBuffer.Shape = pfeature.Shape;}else{SetZMValue(mFeatureBuffer as IFeature, pfeature.Shape);} mFeatureBuffer.set_Value(mindex, value);mFeatureCursor.InsertFeature(mFeatureBuffer);
}
mFeatureCursor.Flush();
Marshal.ReleaseComObject(pfeatureCursor);
Marshal.ReleaseComObject(mFeatureBuffer);
Marshal.ReleaseComObject(mFeatureCursor);
设置ZM值:
//设置Z、M值private void SetZValue(IFeature pF, IGeometry pGeo) {int index;index = pF.Fields.FindField("Shape");IGeometryDef pGeometryDef;pGeometryDef = pF.Fields.get_Field(index).GeometryDef as IGeometryDef;if (pGeometryDef.HasZ){IZAware pZAware = (IZAware)pGeo;pZAware.ZAware = true;IPoint point = (IPoint)pGeo;point.Z = 0;}else{IZAware pZAware = (IZAware)pGeo;pZAware.ZAware = false;}if (pGeometryDef.HasM){IMAware pMAware = (IMAware)pGeo;pMAware.MAware = true;}else{IMAware pMAware = (IMAware)pGeo;pMAware.MAware = false;}pF.Shape = pGeo;}
八、设置比例尺,将数据视图和布局视图联动
//将布局联动到数据上
IObjectCopy objCopy = new ObjectCopyClass();
object copyFromMap = pActiveViewfw.FocusMap;
object copyMap = objCopy.Copy(copyFromMap);
object copyToMap = this.axMapControl1.Map;
objCopy.Overwrite(copyMap, ref copyToMap);//设置比例尺
IEnvelope pEnvelope = pfeature.Extent;
this.axMapControl1.Extent = pEnvelope;
this.axMapControl1.ActiveView.Refresh();
pActiveViewfw.Extent = pEnvelope;
pActiveViewfw.Extent = pEnvelope;
this.axMapControl1.Map.MapScale = 500;//将数据联动到布局上
objCopy = new ObjectCopyClass();
copyFromMap = this.axMapControl1.Map;
copyMap = objCopy.Copy(copyFromMap);
copyToMap = pActiveViewfw.FocusMap;
objCopy.Overwrite(copyMap, ref copyToMap);//缩放至
ICommand ZoomIn = new ControlsPageZoomWholePageCommand();
ZoomIn.OnCreate(axPageLayoutControl1.Object);
axPageLayoutControl1.CurrentTool = ZoomIn as ITool;
ZoomIn.OnClick();
pActiveViewfw.Refresh();
九、制图输出
tagRECT grect = new tagRECT
{left = grect.top = 0,right = 2244,//制图输出的宽,单位像素bottom = 3175//制图输出的高,单位像素
};
IEnvelope menvelope = new EnvelopeClass();
menvelope.PutCoords(0, 0, 2244, 3175);
this.axMapControl1.Refresh();
string pdfpath ="D://测试图.PDF";
ExportPageLayout(pActiveView, menvelope, grect, pdfpath, 300);
/// <summary>
/// 制图输出
/// </summary>
/// <param name="activeView"></param>
/// <param name="env"></param>
/// <param name="exportRect"></param>
/// <param name="strOutPath">输出路径</param>
/// <param name="resolution">分辨率</param>
private void ExportPageLayout(IActiveView activeView, IEnvelope env, tagRECT exportRect, string strOutPath, double resolution){try{if ((activeView != null) && !string.IsNullOrEmpty(strOutPath)){IExport export = null;if (strOutPath.ToUpper().EndsWith(".JPG")){export = new ExportJPEGClass();}else if (strOutPath.ToUpper().EndsWith(".TIF")){export = new ExportTIFFClass();}else if (strOutPath.ToUpper().EndsWith(".BMP")){export = new ExportBMPClass();}else if (strOutPath.ToUpper().EndsWith(".EMF")){export = new ExportEMFClass();}else if (strOutPath.ToUpper().EndsWith(".PNG")){export = new ExportPNGClass();}else if (strOutPath.ToUpper().EndsWith(".GIF")){export = new ExportGIFClass();}else if (strOutPath.ToUpper().EndsWith(".PDF")){export = new ExportPDFClass();}export.ExportFileName = strOutPath;export.Resolution = resolution;export.PixelBounds = env;Int32 hDC = export.StartExporting();//System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();//sw.Start();activeView.Output(hDC, (Int16)export.Resolution, ref exportRect, null, null);//sw.Stop();//Console.WriteLine("执行时间 {0}", sw.Elapsed.TotalMilliseconds);export.FinishExporting();export.Cleanup();//System.Runtime.InteropServices.Marshal.ReleaseComObject(export);}}catch (Exception ex){MessageBox.Show("导出失败!");}}
关于像素和厘米的转换,使用在线转换工具:https://www.gaitubao.com/tools/pixel2cm.html
AE开发笔记(二)制图输出相关推荐
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云 邮箱: happylifemxy@163.com 期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...
- [安卓开发笔记二]android Studio通过jni调用C++代码
[安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...
- 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...
- iOS工程开发笔记二
iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...
- 微信小程序开发笔记二(WXSS和CSS样式美化)
微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...
- 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云 邮箱: h ...
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7555785 作者:毛星云 邮箱: h ...
- PHP微信公众开发笔记(二)
PHP微信公众开发笔记系列 日期:2014.9.1 需求分析: 在成功的开启了微信开发者服务之后,我们便需要开始做响应用户操作的功能了.其实做微信公众平台,当初的目的我就是想做成一个服务平台,因 ...
最新文章
- 微信小程序需要https后台的创业机会思考
- android代码打开数据库,Android打开和关闭数据库
- Python-体育竞技模拟
- java 析构函数_《JAVA编程思想》5分钟速成:第5章(初始化和清理)
- 加密软件VMProtect入门教程
- java删除浏览器cookies_清除浏览器cookie
- 新浪股票数据接口获取
- android 声音不想从蓝牙手机中出来,Android蓝牙音频两个问题
- android horizontalscrollview顶部导航,带有居中效果的HorizontalScrollView使用说明
- 产品经理实践【四川省地震需求分析】
- oracle apex 日志,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
- 全国社会媒体处理大会即将召开,一文详解四天议程精华
- IT服务管理指标体系与报表体系
- mysql锁描述正确的是_MySQL表锁详解
- vc 坐标系统与影射模式
- 自底向上构造语法分析树Java_编译原理系列之五 自底向上优先分析(1)-简单优先分析法...
- python selenium下载图片_Python Selenium Web自动化上传/下载文件图文详解
- ATW黑客组织疯狂对我国重要机构实施窃密、抹黑
- 电脑维修常见软件工具
- MAX7221数码管驱动的多种探索
热门文章
- 使用Latex报错Missing $ inserted.inserted text
- Django geetest
- 普通人在互联网上还有哪些赚钱的机会?
- 计算机一级考试 安装打印机,Windows如何安装打印机?
- ​数据分析项目-宝洁销售额预测分析
- 巴塞尔协议中的计算公式_在巴塞尔协议I 中,资本充足率的计算仅对( )加权资产。...
- JavaScript 原语
- 视频学习:王桂林 C++ 基础与提高 - day 1
- 网络字节序与地址转换函数
- 【Linux】Linux学习(四)Shell编程