随笔分类 - ArcObjects SDK
摘要:在ArcObjects SDK,序列化接口是IPersistStream,该接口的定义如下。 其中GetClassID函数可以获取实际类型的唯一ID,Load函数是反序列化函数,Save函数为序列化函数。我们看下Load和Save函数是接收什么参数。 Save函数的定义如下所示。 public vo
阅读全文
摘要:1、基本技术 开发方面。会使用C#开发语言和Visual Studio开发工具。会使用WinForm或者WPF开发。 理论知识方面。了解GIS的相关概念,例如矢量数据,栅格数据,空间参考、比例尺等概念。 工具方面。能够较为熟练的使用ArcMap桌面软件。 2、面向对象编程 如果我们只用.Net开发一
阅读全文
摘要:MainApp定义了启动界面,主界面等。主界面的整体流程如下。 1、验证许可。 //ArcGIS许可验证 RuntimeManager.Bind(ProductCode.Desktop); var myAoLicenseCheck = new AoLicenseCheck { ProductCode
阅读全文
摘要:1、CommandUIs部分 这部分主要是定义承载Command和Tool的具体UI。如下图所示。 以CommandUI结尾的这几个类都是继承了Framework.Engine里面的ICommandUI接口,这样我们定义的Command和Tool就可以和这些UI绑定到一起了。 其中BarButton
阅读全文
摘要:1、框架引擎部分 引擎模块其实就是之前我们说的App-Command-Tool模块,通过这个模块,把系统的主干框架搭建起来。 其中大部分出现在菜单以及工具条上的按钮都会继承这个框架定义ICommand和ITool。整个系统也是通过整合一些列Comand和Tool的方式,把整个系统搭建出来,这点也可以
阅读全文
摘要:1、技术选型 ArcObjects SDK 10.8(ArcGIS 10.8),.Net FrameWork 4.8,VS2022,WPF(WinForm)、DEV。 用的时候,打包的ArcObjects SDK dll文件,可以使用低版本的,例如10.2,这样可以保障ArcGIS 10.2以上的环
阅读全文
摘要:1、SpatialReference的结构 ArcObjects SDK帮助中Esri.ArcGIS.Geometry命名空间帮助中的Object Model Diagram共两页,第一页就是Geometry的结构,第二页就是SpatialReference的结构。如下图所示。 如果想深入了解空间参
阅读全文
摘要:1、Geometry体系结构 如果要看完整的Geometry体系结构,那么可以去查看帮助中的类结构图,非常完整和严谨。可以通过下图方式打开。 点击打开后,会发现里面的结构非常复杂。但如果我们抽丝剥茧的看的话,其结构逻辑又非常严谨。如下图所示。 这样看起来就比较繁杂,我们可以把我们常用的Geometr
阅读全文
摘要:1、Geoprocessor和IGPProcess Geoprocessor是ArcObjects SDK中定义Tool执行器。IGPProcess接口是ArcObjects SDK中定义的ArcTool接口。也就是说ArcObjects SDK定义的ArcTool都会继承该接口实现。理论上,在Ar
阅读全文
摘要:1、如何找到ToolBox 通过Geoprocessing菜单上的ArcToolbox菜单项,可以打开ArcToolbox面板。 工具栏上也有一个ArcToolbox的按钮,点击该按钮也可以打开。 通过Arccatalog打开。 2、ArcToolbox面板 ArcToolbox面板如下图所示。 A
阅读全文
摘要:1、核心出图代码 出图主要是靠IExport接口,继承该接口的类如下图所示。 出不同格式的图,实例化不同的类即可。例如导出jpg格式的图片的代码如下。 private void Export(string pMxdFilePath, string pResultFolderPath) { //获取参
阅读全文
摘要:1、如何获取MapSurround 和获取MapFrame类似,如果你已经获取指北针、比例尺等对象,可以通过IGraphicsContainer的FindFrame函数获取。如果没有,则通过IGraphicsContainer循环所有Element去判断即可。 2、添加MapSurround 指北针
阅读全文
摘要:1、如何获取MapFrame 打开一个Mxd文件,可能包含一个或多个Map,每个Map都会放到一个MapFrame中,加载到PageLayout上。我们可以通过PageLayout继承的IGraphicsContainer循环判断获取各MapFrame对象。也可以调用IGraphicsContain
阅读全文
摘要:1、从ArcMap角度看结构 一个Mxd文件包含一个PageLayout对象和一个多多个Map对象,每个Map会被包成MapFrame,添加到PageLayout中。我们用ArcMap打开一个mxd文件,在布局模式下看PageLayout都包含了什么。 PageLayout包含的内容以及内容之间的关
阅读全文
摘要:1、RasterLayer的结构 图层的话,除了FeatureLayer外,用的最多的就是RasterLayer了。较FeatureLayer而言,RasterLayer比较简单,这点可以从栅格图层的属性对话框中可以看出。 其中General选项卡对应着RasterLayer继承实现的ILayerG
阅读全文
摘要:1、FeatureLayer的结构 FeatureLayer是我们开发的时候用的最多的API之一,其实现的接口以及关联的其他API也非常多。下面我们就用一张图来整体看下FeatureLayer有哪些常用的功能。 FeatureLayer类继承实现了非常多的接口。每个接口主要负责什么功能呢?我们可以参
阅读全文
摘要:1、Map-Layer主干结构 一个mxd文件可以包含多个地图,但我们常用的大部分都是包含一个地图。一个地图可以包含多个图层组和图层,而图层指向的则是实际数据。图层可以控制数据是否显示、显示样式、最大最小显示比例尺等。Map可以设置自己的空间参考,在渲染的时候,各图层会投影到地图的空间参考下显示。
阅读全文
摘要:1、Mxd文件介绍 ArcGIS的地图文件为.mxd扩展名。Mxd文件的是有版本的,和ArcGIS的版本对应。可以在ArcMap中的File-Save A Copy,保存一个地图拷贝的时候选择Mxd文件的版本,支持的版本如下图所示。 因为我是用ArcMap 10.8截的图,所以这还需要再加一个Arc
阅读全文
摘要:1、为什么再设计一套App-Command-Tool框架 为什么我们要自己再设计一套App-Command框架,而不直接使用AO API中的AxControl-ICommand这套已经非常好的框架呢? 1、宿主不同。我们系统的宿主对象除了可能要包含MapControl等地图显示控件外,还可能会包含我
阅读全文
摘要:1、ICommand接口 ICommand接口是插件协议之一,继承该接口的类都可以成为命令。即点击一下执行,不主动与宿主发生鼠标和键盘交互。该接口包含的重要成员如下表所示。 序号 名称 类型 描述 1 Bitmap Int 命令上显示的图标 2 Caption String 命令上显示的文字 3 C
阅读全文