博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
</a>关于ArcGIS Eegine + C# 的开发环境的搭建</h3>--axMapControl关联axToolbarControl
阅读量:3898 次
发布时间:2019-05-23

本文共 2203 字,大约阅读时间需要 7 分钟。


GIS应用基本界面的搭建

这个界面的搭建比较简单,具体参考下面的文章:

需要注意的2点:

1.必须拖入AxLicenseControl 许可控件,必须添加否则其他控件将无法使用;

2.并且通过代码的方式绑定许可。

ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine); 
1

代码放在program.cs文件的Main函数中,注意必须放Application.Run(new Form1());之前。

这里写图片描述

控件的关联的方法

控件关联的方法有两种:

(一)通过属性进行关联:

例如我们通过axToolbarControl的属性添加了常规工具条后,里面有打开地图功能,必须指定显示的axMapControl

右键axToolbarControl—>属性---->Items 添加Generic Category

这里写图片描述
将Buddy设置为指定axMapControl
这里写图片描述
这样就是通过属性关联axToolbarControlaxMapControl控件。


(二)通过代码手动关联:

如果在界面里添加了splitcontainer 之后TOCControlmapcontrol控件的通过设置的关联无效,

这个时候就得手动设置Buddy
在From1的load事件中添加

axTOCControl1.SetBuddyControl(axMapControl1); 
1

布局视图(axPageLayout)和地图(axMapcontrol)关联

private void copyToPageLayout()        {         //IObjectCopy接口提供Copy方法用于地图的复制        IObjectCopy objectCopy = new ObjectCopyClass();        object copyFromMap = axMapControl1.Map;        object copyMap = objectCopy.Copy(copyFromMap);        object copyToMap = axPageLayoutControl1.ActiveView.FocusMap;        //Overwrite方法用于地图写入PageLayoutControl控件的视图中        objectCopy.Overwrite(copyMap, ref copyToMap);    }    private void axMapControl1_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)    {        copyToPageLayout();    }    private void axMapControl1_OnAfterScreenDraw(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvent e)    {        IActiveView activeView = (IActiveView)axPageLayoutControl1.ActiveView.FocusMap;        IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation;        //根据MapControl的视图范围,确定PageLayoutControl的视图范围        displayTransformation.VisibleBounds = axMapControl1.Extent;        axPageLayoutControl1.ActiveView.Refresh();        copyToPageLayout();    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

代码需要添加引用

using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.Carto;

其中有个地方容易出无法嵌入互操作类型错误:

IObjectCopy objectCopy = new ObjectCopyClass();

这里写图片描述

当报无法嵌入互操作类型错误的时候,其实程序是可以正常执行的,解决方法
将其对应的dll组件的属性中嵌入互操作类型由True改为false。
这里写图片描述
这里对应的组件为ESRI.ArcGIS.System

还可以通过通过实例ObjectCopy接口对IObjectCopy赋值,就可以不用调dll的属性

IObjectCopy objectCopy = new ObjectCopy();


可以实例接口吗?

下篇博客对出现这个问题的原因和一些衍生的问题进行分析!

					
你可能感兴趣的文章
java继承 long和float小记点
查看>>
记录几点在开发中遇到的问题 2015-7-28 (会更新)
查看>>
网银在线的异步操作代码示意图
查看>>
火狐Firefox浏览器安装Selenium_IDE的步骤以及其使用规则
查看>>
记录运行代码的时间长短
查看>>
关于yii2的一些知识的学习笔述
查看>>
用纯php实现MVC框架,文件目录模仿yii2
查看>>
新开发的体重管理项目----用纯php模仿yii2框架建立的
查看>>
JavaScript面向对象编程指南 的笔记
查看>>
在 2016 年做 PHP 开发是一种什么样的体验?(一)
查看>>
PHP获取客户端的IP
查看>>
从头开始学习yii2---1.搭建yii2开发环境
查看>>
从头开始学习yii2---3.语言包的配置
查看>>
yii2-表单验证的一些规则
查看>>
索引相关问题
查看>>
php面试可能会被问道的技术题汇总
查看>>
php面试题1-线程和进程的区别(顺带提下协程)
查看>>
php面试题2-用到过的传输协议
查看>>
php面试题3-yii2和yii的不一样的地方
查看>>
IOS 一些好的框架和 技术大牛的博客
查看>>