一、制作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开发笔记(二)制图输出相关推荐

  1. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  2. [安卓开发笔记二]android Studio通过jni调用C++代码

    [安卓开发笔记二]android Studio通过jni调用C++代码 16/12/11 更新 此博客基于安卓android studio 1.5所写,现在已经有了android studio2.2的 ...

  3. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7707628 作者:毛星云 邮箱: happ ...

  4. iOS工程开发笔记二

    iOS工程开发笔记<二> 在Xcode 4, 5的模板工程中可以看到Precompile Prefix Header,但是在Xcode 6被去除了. Xcode 6去掉Precompile ...

  5. 微信小程序开发笔记二(WXSS和CSS样式美化)

    微信小程序开发笔记二(WXSS和CSS样式美化) 一.CSS基本知识 1.Class选择器的定义 2.ID选择器的定义 3.ID选择器和class选择器的区别 4.CSS中设置颜色 5.CSS中的文本 ...

  6. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  7. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模(五) 粒子系统模拟(二)

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7607916 作者:毛星云    邮箱: h ...

  8. 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. http://blog.csdn.net/zhmxy555/article/details/7555785 作者:毛星云    邮箱: h ...

  9. PHP微信公众开发笔记(二)

    PHP微信公众开发笔记系列 日期:2014.9.1    需求分析: 在成功的开启了微信开发者服务之后,我们便需要开始做响应用户操作的功能了.其实做微信公众平台,当初的目的我就是想做成一个服务平台,因 ...

最新文章

  1. 微信小程序需要https后台的创业机会思考
  2. android代码打开数据库,Android打开和关闭数据库
  3. Python-体育竞技模拟
  4. java 析构函数_《JAVA编程思想》5分钟速成:第5章(初始化和清理)
  5. 加密软件VMProtect入门教程
  6. java删除浏览器cookies_清除浏览器cookie
  7. 新浪股票数据接口获取
  8. android 声音不想从蓝牙手机中出来,Android蓝牙音频两个问题
  9. android horizontalscrollview顶部导航,带有居中效果的HorizontalScrollView使用说明
  10. 产品经理实践【四川省地震需求分析】
  11. oracle apex 日志,Oracle Apex 实用笔记系列 1 - Oracle Apex 调试技巧
  12. 全国社会媒体处理大会即将召开,一文详解四天议程精华
  13. IT服务管理指标体系与报表体系
  14. mysql锁描述正确的是_MySQL表锁详解
  15. vc 坐标系统与影射模式
  16. 自底向上构造语法分析树Java_编译原理系列之五 自底向上优先分析(1)-简单优先分析法...
  17. python selenium下载图片_Python Selenium Web自动化上传/下载文件图文详解
  18. ATW黑客组织疯狂对我国重要机构实施窃密、抹黑
  19. 电脑维修常见软件工具
  20. MAX7221数码管驱动的多种探索

热门文章

  1. 使用Latex报错Missing $ inserted.inserted text
  2. Django geetest
  3. 普通人在互联网上还有哪些赚钱的机会?
  4. 计算机一级考试 安装打印机,Windows如何安装打印机?
  5. ​数据分析项目-宝洁销售额预测分析
  6. 巴塞尔协议中的计算公式_在巴塞尔协议I 中,资本充足率的计算仅对( )加权资产。...
  7. JavaScript 原语
  8. 视频学习:王桂林 C++ 基础与提高 - day 1
  9. 网络字节序与地址转换函数
  10. 【Linux】Linux学习(四)Shell编程