这是我们GIS课程的结课作业,只能说,大心血

链接在最后,但是还是希望大家可以看看代码,可以留言相互交流学习。

目录

链接在最后,但是还是希望大家可以看看代码,可以留言相互交流学习。

添加图名

指北针

比例尺(类似指北针。从样式库里添加)

图例

指北针窗体

导出地图

打印地图


添加图名

public void AddTitle(IPageLayout pageLayout, String s){//找到PageLayoutIPageLayout pPageLayout = mainPageLayoutControl1.PageLayout;//找到元素容器IGraphicsContainer pGraphicsContainer = pPageLayout as IGraphicsContainer;//创建元素ITextElement pTextElement = new TextElementClass();pTextElement.Text = s;ITextSymbol pTextSymbol = new TextSymbolClass();//Text的符号样式pTextSymbol.Size = 30;pTextSymbol.Color = GetRGB(0, 0, 0);pTextElement.Symbol = pTextSymbol;//设置位置                        IElement pElement = pTextElement as IElement;pElement.Geometry = mainPageLayoutControl1.TrackRectangle();//将元素添加到容器中pGraphicsContainer.AddElement(pElement, 0);//刷新mainPageLayoutControl1.Refresh();
}

指北针

 IMapFrame pMapFrame = ((IActiveView)this.mainPageLayoutControl1.PageLayout).GraphicsContainer.FindFrame(this.mainPageLayoutControl1.ActiveView.FocusMap) as IMapFrame;IElement pElement = pMapFrame as IElement;UID pID = new UIDClass();pID.Value = "esriCarto.MarkerNorthArrow";IEnvelope pEnv = new EnvelopeClass();pEnv.PutCoords(16, 24, 22, 26);AddNorthArrow NForm = new AddNorthArrow(mainPageLayoutControl1.ActiveView, esriSymbologyStyleClass.esriStyleClassNorthArrows);//axPageLayoutControl1.ActiveView, esriSymbologyStyleClass.esriStyleClassNorthArrowsNForm.ShowDialog();IStyleGalleryItem styleGalleryItem = NForm.m_styleGalleryItem;NForm.Dispose();if (styleGalleryItem == null) return;IMapSurround pMapSurround = this.CreateSurround(pID, pEnv, styleGalleryItem, pMapFrame, this.mainPageLayoutControl1.PageLayout);this.mainPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

比例尺(类似指北针。从样式库里添加)

 IMapFrame pMapFrame = ((IActiveView)this.mainPageLayoutControl1.PageLayout).GraphicsContainer.FindFrame(this.mainPageLayoutControl1.ActiveView.FocusMap) as IMapFrame;IElement pElement = pMapFrame as IElement;UID pID = new UIDClass();pID.Value = "esriCarto.ScaleLine";IEnvelope pEnv = new EnvelopeClass();pEnv.PutCoords(2, 3, 3, 5);AddScalebar SForm = new AddScalebar(mainPageLayoutControl1.ActiveView, esriSymbologyStyleClass.esriStyleClassScaleBars);SForm.ShowDialog();IStyleGalleryItem styleGalleryItem = SForm.m_styleGalleryItem;SForm.Dispose();if (styleGalleryItem == null) return;IMapSurround pMapSurround = this.CreateSurround(pID, pEnv, styleGalleryItem, pMapFrame, this.mainPageLayoutControl1.PageLayout);this.mainPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);

图例

 public void AddLegend(IPageLayout pageLayout){//获取axPageLayoutControl1的图形容器IGraphicsContainer graphicsContainer = mainPageLayoutControl1.GraphicsContainer;//获取axPageLayoutControl1空间里面显示的地图图层IMapFrame mapFrame = (IMapFrame)graphicsContainer.FindFrame(mainPageLayoutControl1.ActiveView.FocusMap);if (mapFrame == null) return;//创建图例UID uID = new UIDClass();//创建UID作为该图例的唯一标识符,方便创建之后进行删除、移动等操作uID.Value = "esriCarto.Legend";IMapSurroundFrame mapSurroundFrame = mapFrame.CreateSurroundFrame(uID, null);if (mapSurroundFrame == null) return;if (mapSurroundFrame.MapSurround == null) return;mapSurroundFrame.MapSurround.Name = "Legend";IEnvelope envelope = new EnvelopeClass();envelope.PutCoords(16, 3, 20, 5);//设置图例摆放位置(原点在axPageLayoutControl左下角)IElement element = (IElement)mapSurroundFrame;element.Geometry = envelope;//将图例转化为几何要素添加到axPageLayoutControl1,并刷新页面显示mainPageLayoutControl1.AddElement(element, Type.Missing, Type.Missing, "Legend", 0);mainPageLayoutControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}

指北针窗体

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WindowsFormsApplication3
{public partial class AddNorthArrow : Form{private IActiveView mActiveView;private IFeatureLayer mFeatureLayer;public IStyleGalleryItem m_styleGalleryItem;private esriSymbologyStyleClass mStyleClass;public AddNorthArrow(IFeatureLayer pLayer, IActiveView pActiveView){InitializeComponent();this.Text = "指北针样式选择";mFeatureLayer = pLayer;mActiveView = pActiveView;}public AddNorthArrow(IActiveView pActiveView, esriSymbologyStyleClass styleClass){mActiveView = pActiveView;mStyleClass = styleClass;InitializeComponent();}private void Form2_Load(object sender, EventArgs e){axSymbologyControl1.LoadStyleFile("D:\。。。。\ESRI.ServerStyle");          axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassNorthArrows;//Select the color ramp itemaxSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass).SelectItem(0);   }private void axSymbologyControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.ISymbologyControlEvents_OnMouseDownEvent e){}private void button1_Click(object sender, EventArgs e){this.Hide(); }private void button2_Click(object sender, EventArgs e){m_styleGalleryItem = null;//hide the formthis.Hide(); }private void axSymbologyControl1_OnItemSelected(object sender, ISymbologyControlEvents_OnItemSelectedEvent e){m_styleGalleryItem = (IStyleGalleryItem)e.styleGalleryItem;}}}

导出地图

private void btnPrint_Click(object sender, EventArgs e)//点击打印Button响应{//创建保存文件对话框的实例SaveFileDialog SaveFile = new SaveFileDialog();//根据掩码文本框对对话框初始化switch (comboBox1.SelectedIndex){case 0:SaveFile.Filter = "BPM文件(*.bmp)|*.bmp";SaveFile.Title = "保存bmb文件";break;case 2:SaveFile.Filter = "GIF文件(*.gif)|*.gif";SaveFile.Title = "保存gif文件";break;case 3:SaveFile.Filter = "JPG文件(*.jpeg)|*.jpeg";SaveFile.Title = "保存jpg文件";break;case 4:SaveFile.Filter = "PNG文件(*.png)|*.png";SaveFile.Title = "保存png文件";break;case 5:SaveFile.Filter = "TIFF文件(*.TIFF)|*.TIFF";SaveFile.Title = "保存tiff文件";break;case 6:SaveFile.Filter = "PDF文件(*.PDF)|*.pdf";SaveFile.Title = "保存pdf文件";break;}if (txtResolution.Value > 1){  if (SaveFile.ShowDialog() == DialogResult.OK){//打开保存文件对话框 并选择路径和文件名SaveFile.AddExtension = true;//设置为自动补充文件扩展名IExport pExport;switch (comboBox1.SelectedIndex)//根据掩码文本框的索引值穿件不同的pExport实例并调用Export方法{case 0:pExport = new ExportBMPClass();Export(pExport, SaveFile.FileName);break;case 2:pExport = new ExportGIFClass();Export(pExport, SaveFile.FileName);break;case 3:pExport = new ExportJPEGClass();Export(pExport, SaveFile.FileName);break;case 4:pExport = new ExportPNGClass();Export(pExport, SaveFile.FileName);break;case 5:pExport = new ExportTIFFClass();Export(pExport, SaveFile.FileName);break;case 6:pExport = new ExportPDFClass();Export(pExport, SaveFile.FileName);break;}}}else {MessageBox.Show("请输入有效数字~!", "提示", MessageBoxButtons.OK);}}//输出文件public void Export(IExport pExport, string path){IActiveView pActiveView;IEnvelope pPixelBoundsEnv;int iOutputResolution;int iScreenResolution;int hdc;pActiveView = m_Map.ActiveView;pExport.ExportFileName = path;iScreenResolution = 96;iOutputResolution = 300;pExport.Resolution = iOutputResolution;tagRECT pExportFrame;pExportFrame = pActiveView.ExportFrame;tagRECT exportRECT;exportRECT.left = 0;exportRECT.top = 0;exportRECT.right = pActiveView.ExportFrame.right * (iOutputResolution / iScreenResolution);exportRECT.bottom = pActiveView.ExportFrame.bottom * (iOutputResolution / iScreenResolution);pPixelBoundsEnv = new EnvelopeClass();pPixelBoundsEnv.PutCoords(exportRECT.left, exportRECT.top, exportRECT.right, exportRECT.bottom);pExport.PixelBounds = pPixelBoundsEnv;hdc = pExport.StartExporting();pActiveView.Output(hdc, (int)pExport.Resolution, ref exportRECT, null, null);pExport.FinishExporting();pExport.Cleanup();MessageBox.Show("成功保存地图~!", "保存", MessageBoxButtons.OK);}

打印地图

AxPageLayoutControl m_Map;//新建axPageLayoutControl变量,用于接收传进来的参数private PageSetupDialog pageSetup=new PageSetupDialog();PrintDocument PD = new PrintDocument();private PrintDialog print=new PrintDialog();public PrintMap(AxPageLayoutControl m_Map){InitializeComponent();this.Text = "打印地图";this.m_Map = m_Map;copy(m_Map);// copyMap(m_Map,axPageLayoutControl1);m_Map.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);}/* public void copyMap(AxPageLayoutControl m_Map, AxPageLayoutControl axPageLayoutControl){ IObjectCopy objectCopy = new ObjectCopy();object tocopyMap = m_Map.ActiveView.GraphicsContainer;object copiedMap = objectCopy.Copy(tocopyMap);object toOverwiteMap = axPageLayoutControl1.ActiveView.FocusMap;objectCopy.Overwrite(copiedMap, ref toOverwiteMap);}*/    private void PrintMap_Load(object sender, EventArgs e){pageSetup = new PageSetupDialog();//初始化页面设置对话框的页面设置属性为缺省设置pageSetup.PageSettings = new System.Drawing.Printing.PageSettings();//初始化页面设置对话框的打印机属性为缺省设置pageSetup.PrinterSettings = new System.Drawing.Printing.PrinterSettings();print = new PrintDialog();}private void copy(AxPageLayoutControl mainlayoutControl){IObjectCopy objectcopy = new ObjectCopyClass();object tocopymap = mainlayoutControl.ActiveView.GraphicsContainer;   //获取mapcontrol中的map   这个是原始的object copiedmap = objectcopy.Copy(tocopymap);       //复制一份map,是一个副本object tooverwritemap = axPageLayoutControl1.ActiveView.GraphicsContainer;    //IActiveView.FocusMap : The map that tools and controls act on. 控件和工具作用的地图,大概是当前地图吧!!!objectcopy.Overwrite(copiedmap, ref tooverwritemap);System.Runtime.InteropServices.Marshal.ReleaseComObject(objectcopy);IGraphicsContainer mainGraphCon = tooverwritemap as IGraphicsContainer;mainGraphCon.Reset();IElement pElement = mainGraphCon.Next();IArray pArray = new ArrayClass();while (pElement != null){pArray.Add(pElement);pElement = mainGraphCon.Next();}int pElementCount = pArray.Count;IPageLayout PrintPageLayout = axPageLayoutControl1.PageLayout;IGraphicsContainer PrintGraphCon = PrintPageLayout as IGraphicsContainer;PrintGraphCon.Reset();IElement pPrintElement = PrintGraphCon.Next();while (pPrintElement != null){PrintGraphCon.DeleteElement(pPrintElement);pPrintElement = PrintGraphCon.Next();}for (int i = 0; i < pArray.Count; i++){PrintGraphCon.AddElement(pArray.get_Element(pElementCount - 1 - i) as IElement, 0);}axPageLayoutControl1.Refresh();}private void button1_Click(object sender, EventArgs e){//实例化打印设置窗口DialogResult result = pageSetup.ShowDialog();//设置打印文档对象的打印机PD.PrinterSettings = pageSetup.PrinterSettings;//设置打印文档对象的页面设置为用户在打印设置对话框中的设置PD.DefaultPageSettings = pageSetup.PageSettings;//页面设置int i;IEnumerator paperSizes = pageSetup.PrinterSettings.PaperSizes.GetEnumerator();paperSizes.Reset();for (i = 0; i < pageSetup.PrinterSettings.PaperSizes.Count; ++i){paperSizes.MoveNext();if (((PaperSize)paperSizes.Current).Kind == PD.DefaultPageSettings.PaperSize.Kind){PD.DefaultPageSettings.PaperSize = ((PaperSize)paperSizes.Current);}}//初始化纸张和打印机IPaper paper = new PaperClass();IPrinter printer = new EmfPrinterClass();//关联打印机对象和纸张对象 paper.Attach(pageSetup.PrinterSettings.GetHdevmode(pageSetup.PageSettings).ToInt32(), pageSetup.PrinterSettings.GetHdevnames().ToInt32());printer.Paper = paper;axPageLayoutControl1.Printer = printer;pageSetup.ShowDialog();}private void btnPrint_Click(object sender, EventArgs e){//显示帮助按钮            print.ShowHelp = true;print.Document = PD;//显示打印窗口DialogResult result = print.ShowDialog();// 如果显示成功,则打印.if (result == DialogResult.OK) PD.Print();Close();}}
}

比较综合。截图太多,就不放了。exe可运行,放百度网盘了。一定结合百度云的窗体,运行一下再去看代码,最后的结课报告有完整的功能介绍和运行结果截图和测试,需要的可以留言或私信。

百度云链接:

链接:https://pan.baidu.com/s/1NTFdUBJGBO69SJ3CRUKWCQ 密码:tqfp

VSC# ArcGIS 二次开发--出图工具:添加图名、比例尺、指北针、图例,导出图片或文件、打印地图相关推荐

  1. ArcGIS二次开发基础教程(03):保存文档和导出地图

    ArcGIS二次开发基础教程(03):保存文档和导出地图 保存文档 保存: //这里的path为全局变量 在打开文件获添加数据时赋值原路径 //判断打开文件是否为mxd文件 是则保存 不是则另存为 i ...

  2. [arcgis插件]gis二次开发 报备工具:SHP转TXT文本、TXT转SHP插件

    [arcgis插件]gis二次开发 报备工具:SHP转TXT文本.TXT转SHP插件 [2022.09.28版本更新] 1.shp转txt文件: 选择图层:选择面图层 保存路径:设置一个文件夹路径,可 ...

  3. Arcgis 二次开发指导 热点分析实现

    Arcgis 二次开发 热点分析 背景 具体操作 1.toolbox试验 2.查找接口 3.输入文件路径,特别注意! 4.找出错误原因 总结 背景 大三下上完了arcgis二次开发,真心觉得咱们gis ...

  4. ArcGis二次开发ArcEngine开篇

    ArcGis二次开发ArcEngine开篇 以一款简单GIS软件截图片引入本篇内容 导读 万事开头难,如何利用ArcEngine开发一款GIS产品呢?一款简单的GIS软件基本布局如上图所示,共划分为六 ...

  5. ArcGIS二次开发——地图居中显示

    ArcGIS二次开发--地图居中显示 一.创建 Engine 应用程序 1.启动 Visual Studio 2012,从"文件"->"新建"选中&quo ...

  6. vs2012做ArcGIS二次开发前期准备

    解压ArcGIS 1.双击ESRI 2.点击 一路next,自己选择安装路径,建议放在非系统盘 3.开始菜单-ArcGIS-License Server Administrator 4.点击" ...

  7. 基于Python的ArcGIS二次开发实验实习教程

    基于Python的ArcGIS二次开发实验实习教程. ISBN编号: 9787307221772 原价(定价): 39元, 武汉大学出版社 天猫正版链接: https://detail.tmall.c ...

  8. arcgis二次开发python-ArcGIS 二次开发专题 序

    依据ArcGIS 组件式开发及应用的目录结构,将系统性的学习ArcGIS 二次开发的道路分为三个部分.这个系列包含以下三个部分: Part1 基础 1. 前言 1.1 组件式GIS 1.2 ArcOb ...

  9. 基于ARCGIS二次开发可视化开发环境搭建(JAVA)

    这两天为了搭建这么一个基于java的ArcGIS二次开发环境可着实花了一番心血.在网上搜索各种资料,大部分都是基于C#的,关于JAVA的很少,而且很杂乱,没有一个完整的.详细的.适合新手的这么一个教程 ...

最新文章

  1. php rabbmq教程_RabbitMQ+PHP 教程一(Hello World)
  2. Bash脚本: 根据关键字做替换
  3. 【递推DP技巧 hdu 2050 折线分割平面】
  4. LeetCode Algorithm 811. 子域名访问计数
  5. ASP.NET 网页之间传递值
  6. iOS之基于FreeStreamer的简单音乐播放器(模仿QQ音乐)
  7. 虚拟机安装系统磁盘扩容
  8. python应声虫程序_【Python】游戏-成语接龙
  9. vs2019豆沙绿背景色及consolas字体设置
  10. iLife '09测评
  11. 美国弗吉尼亚大学计算机科学,弗吉尼亚大学计算机科学专业排名第30(2020年USNEWS美国排名)...
  12. 香橙派PC 2(H5)配置备忘录
  13. 新中大服务器端数据库未能连接,新中大服务器数据库未能连接
  14. 【电力电子技术DC-AC】三相SPWM逆变器Simulink仿真(设置死区时间)
  15. Arduino ESP32利用PWM实现板载LED呼吸灯效果
  16. android开机调用搜狗输入法
  17. 在iphone、ipad上安装一些常用命令行命令及实时抓取移动设备上的通信包(ADVsock2pipe+Wireshark+nc+tcpdump)
  18. OpenGL中gl,glu,glut的区别
  19. Windows10正确配置java环境
  20. 计算机考试时电脑出故障怎么办,2020年注册会计师考试电脑出现故障怎么办?...

热门文章

  1. 宇视网络视频录像机国标对接配置指导
  2. 通过网络共享将 Windows 10 的文件复制到 iPhone 手机上
  3. Net Core WebApi自定义拦截特性简单实现
  4. Ubuntu 各版本代号对照表
  5. BJTUOJ 1853 gangpener买零食(水~)
  6. C语言求解亲密数在3000之内
  7. smzdm 扫地机器人_2020年双十二有什么值得购买的扫地机器人,科沃斯T8、米家1T、石头T7,还有什么推荐的品牌吗?...
  8. 软件体系结构的第二次实验(解释器风格与管道过滤器风格
  9. iPhone12全面曝光10月上市 iPhone12是5g双卡双待手机
  10. 商品热销排行【项目 商城】