程序主界面如下图所示:

主界面代码:

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;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;namespace WindowsFormsApplication1
{public partial class FrmMain : DevComponents.DotNetBar.RibbonForm{private INorthArrow m_NorthArrrow;private IElement m_Element;private string operation;// 构造函数public FrmMain(){InitializeComponent();}// 地图放大private void btnZoomIn_Click(object sender, EventArgs e){operation = null;ICommand command = new ControlsPageZoomInTool();command.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = command as ITool;}// 地图缩小private void btnZoomOut_Click(object sender, EventArgs e){operation = null;ICommand command = new ControlsPageZoomOutTool();command.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = command as ITool;}// 地图漫游private void btnPan_Click(object sender, EventArgs e){operation = null;ICommand command = new ControlsPagePanTool();command.OnCreate(axPageLayoutControl1.Object);axPageLayoutControl1.CurrentTool = command as ITool;}// 全图显示private void btnFullExtent_Click(object sender, EventArgs e){ICommand command = new ControlsPageZoomWholePageCommand();command.OnCreate(axPageLayoutControl1.Object);command.OnClick();}// 添加数据private void btnLoadData_Click(object sender, EventArgs e){ICommand command = new ControlsAddDataCommand();command.OnCreate(axPageLayoutControl1.Object);command.OnClick();}// 添加指北针private void btnAddNorthArrow_Click(object sender, EventArgs e){FrmNorthArrow frmNorthArrow = new FrmNorthArrow();frmNorthArrow.OnQueryNorthArrow += pNorthArrow => m_NorthArrrow = pNorthArrow;frmNorthArrow.ShowDialog();axPageLayoutControl1.CurrentTool = null;axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;operation = "添加指北针";}// OnMouseDown事件private void axPageLayoutControl1_OnMouseDown(object sender, IPageLayoutControlEvents_OnMouseDownEvent e){if (operation == "添加指北针"){IEnvelope pEnvelope = axPageLayoutControl1.TrackRectangle();if (pEnvelope.IsEmpty || pEnvelope == null || pEnvelope.Width == 0 || pEnvelope.Height == 0){return;}// 删除已有指北针IActiveView pActiveViewv = axPageLayoutControl1.PageLayout as IActiveView;IGraphicsContainer pGraphicsContainer = pActiveViewv.GraphicsContainer;if (m_Element != null){pGraphicsContainer.DeleteElement(m_Element);pActiveViewv.Refresh();}// 获取框架元素IMapFrame pMapFrame = pGraphicsContainer.FindFrame(pActiveViewv.FocusMap) as IMapFrame;IMapSurroundFrame pMapSurroundFrame = new MapSurroundFrame() as IMapSurroundFrame;pMapSurroundFrame.MapFrame = pMapFrame;pMapSurroundFrame.MapSurround = m_NorthArrrow as IMapSurround;// 添加指北针m_Element = pMapSurroundFrame as IElement;m_Element.Geometry = pEnvelope;pGraphicsContainer.AddElement(m_Element, 0);pActiveViewv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}}}
}

添加指北针界面如下图所示:
指北针界面代码:

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;
using stdole;
using ESRI.ArcGIS.ADF;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;namespace WindowsFormsApplication1
{public partial class FrmNorthArrow : DevComponents.DotNetBar.OfficeForm{// 定义事件public event Action<INorthArrow> OnQueryNorthArrow;// 样式变量private ISymbologyStyleClass m_SymbologyStyleClass;private IStyleGalleryItem m_StyleGalleryItem;private INorthArrow m_NorthArrow;// 构造函数public FrmNorthArrow(){InitializeComponent();}// Load事件private void FrmNorthArrow_Load(object sender, EventArgs e){axSymbologyControl1.LoadStyleFile(Application.StartupPath + "\\style\\ESRI.ServerStyle");axSymbologyControl1.StyleClass = esriSymbologyStyleClass.esriStyleClassNorthArrows;// 选择符号m_SymbologyStyleClass = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);m_SymbologyStyleClass.SelectItem(0);// 预览符号PriviewSymbol();inputAngle.Value = (int)m_NorthArrow.CalibrationAngle;inputColor.SelectedColor = Utility.ConvertToColor(m_NorthArrow.Color);}// 切换符号private void axSymbologyControl1_OnItemSelected(object sender, ISymbologyControlEvents_OnItemSelectedEvent e){m_StyleGalleryItem = e.styleGalleryItem as IStyleGalleryItem;m_NorthArrow = m_StyleGalleryItem.Item as INorthArrow;// PriviewSymbol();inputAngle.Value = (int)m_NorthArrow.CalibrationAngle;inputColor.SelectedColor = Utility.ConvertToColor(m_NorthArrow.Color);}// 设置颜色private void inputColor_SelectedColorChanged(object sender, EventArgs e){m_NorthArrow.Color = Utility.ConvertToRgbColor(inputColor.SelectedColor);PriviewSymbol();}// 设置角度private void inputAngle_ValueChanged(object sender, EventArgs e){m_NorthArrow.CalibrationAngle = inputAngle.Value;PriviewSymbol();}// 符号预览 private void PriviewSymbol(){IPictureDisp pPictureDisp = m_SymbologyStyleClass.PreviewItem(m_StyleGalleryItem, pictureBox1.Width, pictureBox1.Height);Image priviewImage = Image.FromHbitmap(new IntPtr(pPictureDisp.Handle));pictureBox1.Image = priviewImage;}// 确定private void btnOk_Click(object sender, EventArgs e){if (OnQueryNorthArrow != null){m_NorthArrow.Size *= 3;OnQueryNorthArrow(m_NorthArrow);this.Close();this.Dispose();}}// 取消private void btnCancel_Click(object sender, EventArgs e){this.Close();this.Dispose();}}
}

辅助类代码:

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;
using stdole;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.DataSourcesGDB;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.Output;
using ESRI.ArcGIS.SystemUI;namespace WindowsFormsApplication1
{public class Utility{// Color转换为IColorpublic static IColor ConvertToRgbColor(Color color){IColor pColor = new RgbColor();pColor.RGB = color.R + color.G * 256 + color.B * 65536;return pColor;}// IColor转换为Colorpublic static Color ConvertToColor(IColor pColor){return ColorTranslator.FromOle(pColor.RGB);}}
}

运行结果如下图:

ArcEngine添加指北针相关推荐

  1. ArcEngine添加指北针、比例尺、图例(注意UID值)

    指北针 C#代码   public void AddNorthArrow(IPageLayout pageLayout) { IGraphicsContainer container = pageLa ...

  2. ggspatial | ggplot2的地图制作拓展包(1):如何添加指北针和比例尺

    在前面的推文里,小编介绍了R语言的基础绘图系统和tmap工具包绘制地图的方法.ggplot2工具包作为现在最受欢迎的绘图包,其本身绘制地图的功能并不算强大.但是ggplot2有许多优秀的拓展包,它们共 ...

  3. 【python】使用python绘制地图时添加指北针

    写在前面 本博文基于matplotlib,手动实现在python中绘制地图时添加指北针. 代码如下: from mpl_toolkits.basemap import Basemap import m ...

  4. ArcGIS API for JavaScript 4.2学习笔记[10] 2D添加指北针widget、视图保存、视图padding(第二章完结)...

    这几个例子是第二章除了入门之外比较简单的几个,就做个合集,把最核心的代码(第二参数)和 引用放上来即可,不作多解释. 2D地图添加指北针widget 2D地图一般修正方向为正北方就需要这个widget ...

  5. 南方cass怎么添加指北针_添加比例尺 指北针

    添加图例.比例尺.指北针 代码中有注释,直接上 指北针 C# 代码  public void AddNorthArrow(IPageLayout pageLayout)  {  IGraphic ...

  6. 南方cass怎么添加指北针_添加图例、比例尺、指北针

    代码中有注释,直接上 指北针 public void AddNorthArrow(IPageLayout pageLayout) { IGraphicsContainer container = pa ...

  7. ArcEngine 添加字段

    private void AddField(IFeatureClass pFeatureClass, string name, string aliasName, esriFieldType Fiel ...

  8. cass怎么添加指北针图例_答疑|CASS怎么添加图例?

    有用户拿着2017版的图式过来找我,图式的附图中,图框的右侧都有一个"图例".CASS咋没有呢?怎么解决? 图式的图例截图 答疑 CASS暂时只有5000-100000比例尺的图框 ...

  9. cass怎么添加指北针图例_你做的柱状图太丑了,怎么不来学学这些操作?

    早上好~ 上期 PPT 饼图教程推出后,有小伙伴留言询问有没有关于柱形图 / 条形图的一些玩法,想借此在一些汇报上突出新意,所以就有了今天这篇依旧很干的教程. 不得不说柱形图和条形图在做数据汇报时很常 ...

最新文章

  1. Java项目:小蜜蜂扩音器网上商城系统(java+JSP+Servlet+JDBC+Ajax+mysql)
  2. 小裁缝返乡创业做儿童品牌,如今身家数十亿冲刺上市
  3. linux 子域dns,linux下搭建DNS子域及相关授权详解
  4. 安利一款编辑神器——Markdown
  5. Django Rest framework的限流实现流程
  6. mockjs的介绍、基本使用和封装
  7. 【 Redis开发与运维】第3章 读书笔记
  8. python中什么是句柄_python中的句柄操作的方法示例
  9. Linux下本地yum源配置和局域网yum源配置
  10. Paraview源码解析5:vtkPolyDataAlgorithm类
  11. 修改egret引擎源码
  12. 用html5画卡通人物源代码,用canvas画一个卡通人物!!
  13. 7寸显示器 树莓派4b_树莓派7寸触摸屏安装指南
  14. ribbonmq超时配置_使用RabbitMQ实现订单超时取消(延迟队列)
  15. 一文让你读懂什么是智慧数字经营
  16. cad2016服务器为空,修改CAD2016的服务器地址
  17. qq互动视频页面加载失败_腾讯视频互动视频 | 创作指南
  18. (一)kibana使用
  19. move_base参数配置
  20. c# .net 读取word文档文件,.txt、.doc、.docx、.xls、xlsx

热门文章

  1. Tensorflow保存模型和加载预训练模型
  2. Windows Server 2019的安装模式
  3. Women in Tech | 关于职业与成长,她们给人奋进的启发和动力
  4. 3D电视与3D眼镜的工作原理
  5. 基于C+++Mysql实现(WinForm)校友管理系统(面向对象)【100010007】
  6. Android 源码分享之小米文件管理器
  7. noip模拟赛 斐波那契
  8. Scrapy 豆瓣搜索页爬虫
  9. Defender绝密档案:惊现中本聪?
  10. 517编程3380造素数