1、基本技术

开发方面。会使用C#开发语言和Visual Studio开发工具。会使用WinForm或者WPF开发。

理论知识方面。了解GIS的相关概念,例如矢量数据,栅格数据,空间参考、比例尺等概念。

工具方面。能够较为熟练的使用ArcMap桌面软件。

2、面向对象编程

如果我们只用.Net开发一个普通的应用的话,我们是否理解和掌握面向对象并不是那么重要。.Net的学习曲线比较缓,新手很容易上手,并开发出应用,但想要提高还是有些难度的。而ArcObjects是一个非常严谨的面向对象类库,没有考虑学习曲线和成本的问题,所有的接口和类的定义都正常设计的。

做ArcObejcts SDK开发的时候,我们一定要理解接口转换。例如我们做一个打开Mxd文件,获取某个图层范围的功能,应该怎么做呢?

先使用IMapDocument接口,打开Mxd文件,实例化的时候,需要实例化MapDocumentClass。

通过IMapDocument接口获取当前激活的IMap实例。

通过IMap实例获取指定的ILayer实例。

接下来我们要通过ILayer获取该图层的范围。

此时就遇到问题了,我们可以去帮助查下ILayer的定义,该接口是没有定义类似范围这样的属性的。我们可以先看下有哪些类继承ILayer,然后找到最熟悉的类,例如FeatureLayer和RasterLayer,看看其继承了哪些共同的接口,而这个接口又能得到范围信息。

这样我们就很容易找到了IGeoDataset接口,该接口有Extent属性定义,该属性返回IEnvelope实例,这个属性就是我们需要的了。

最后,我们还可以查看下IGeoDataset接口,看看是不是我们常用的图层都继承了这个接口。确认后,我们就可以写代码了。

ILayer myLayer=myMap. get_Layer(0);
IGeoDataset myGeoDataset= myLayer as IGeoDataset;
If (myGeoDataset!=null)
{
return myGeoDataset. Extent;
}

为了防止某个继承ILayer的类,并没有继承IGeoDataset,可以加一个是否为null的判断。这个就是典型的ArcObjects SDK开发的时候的接口转换。

3、和ArcMap配合开发

在做一个功能之前如果不清楚,可以先使用ArcMap去测试,测试到满意的效果之后,再去开发。例如在矢量图层上显示文字标注,设置比例尺样式等,都可以在ArcMap操作后,知道应该去设置哪些参数,这些参数都设置成什么值,然后再去写代码。

如果一个功能用ArcMap都没有做出来,就是调用ArcObject SDK去实现,很难找到思路和突破口。例如矢量图层文字标注的时候,设置文字标注的位置,一般情况下,我们是没什么要求的,都是按照默认参数标注。但如果要求标注到正上方呢?并且如果是线,沿着线的方向标注呢?这时,我们就可以去ArcMap里面操作,把想要的效果做出来,如下图所示。

可以多次尝试各种参数设置的效果,知道满意为止,把参数记录下来,在代码里面实现。

4、善于使用帮助

帮助中接口与类之间的关系定义的非常清楚,这在我们进行接口转换的时候帮助非常大。而且有些复杂的概念,帮助中会有详细的解释说明,甚至包含配图以及例子代码。如果一个问题网上有多种说法,记得自己可以在帮助中去找下有没有相关的说明,帮助中解释说明是最准确的。

当对ArcObject SDK稍微有些熟悉的时候,可以去看下每个名称空间中的接口类关系图,直观的了解各接口类之间的关系,以及还有哪些有用自己却没怎么注意到的接口和类。这些图可以在帮助的左侧树种找到,也可以直接去SDK的安装目录下找,路径位C:\Program Files (x86)\ArcGIS\DeveloperKit10.8\Diagrams。

SDK安装后,在C:\Program Files (x86)\ArcGIS\DeveloperKit10.8\Samples\arcobjects-sdk-community-samples-master.zip中包含了很多ArcObject SDK的例子工程,里面的代码都可以打开参考和学习。

SDK安装后,会有一个C:\Program Files (x86)\ArcGIS\DeveloperKit10.8 \Icons\ArcObjects_Icons.zip文件,这个文件包含了很多ArcGIS使用的图标。我们自己开发系统的时候,可以使用里面的图标。

5、调用Toolbox中Tool的技巧

如矢量数据、栅格数据作为参数的时候,尽量传文件路径,而不是对象;

每调一个ToolBox的时候,都要去捕捉错误信息,并抛出来,不然模型运行中止,不知道到底是哪出的问题;

参数计算的文件名尽量不要包含汉字字符,并且文件名尽量以字母开头;

生成的结果文件尽量都保存成shp、tif或者img等文件,如果需要存储到其他数据源中,再调用代码拷贝过去即可。

如果不知道Toolbox的参数该如何设置,那么就在ArcMap里面执行一遍,拷贝Py代码,看py代码中如何设置的,按照其设置即可。

如果代码中调用某个Toolbox报错,可以用同样的数据和参数在ArcMap里面执行一遍,看到底是哪错误了。调整数据源格式或者参数,执行成功后,再去修改代码。

6、可以深入理解一些原理

一些概念,我们可以更深入的理解一下。例如水系追踪,包含了很多步骤,非常固定,大多数人不管用ArcMap做,还是用Arcpy或者基于ArcObjects开发,都是那么几个步骤。但每个步骤的意义是什么?为什么要这么做?这些问题可能有很人多说不清。

例如设置汇流量值的时候,这个值代表什么意义?如果大家是专门研究这个方向的,就可以去知乎、bilibili或者一些公众号去看下一些人写的文章或者录得视频。

我之前做了一个通过DEM生成水系的功能,汇流量设置的时候,就设置一个数字,没单位,也不知道其意义。通过一篇文章我才明白怎么回事。

https://blog.csdn.net/liyuanxiang1984/article/details/73863609?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%2273863609%22%2C%22source%22%3A%22mytudousi%22%7D&ctrtid=mAS91

后来我就修改了水系生成界面,把设置最小汇流量的地方设置成了平方公里,这样就容易理解了。

同理,大家在做自己业务模型的时候,可以多去这些地方看下别人写的深入分析相关内容的文章,会有很大的收获。

7、需要注意的其他问题

1、ArcMap和ArcObjects SDK都是32位的,所以开发的程序只能编译成32位。

2、注意内存泄漏问题,例如查询获取的IFeatureCursor等,需要释放。

3、打开一个Shape文件后,系统后生成一个锁文件,不需要这个数据需要释放掉FeatureClass,并把锁文件也解掉。

ArcObjects SDK开发 024开发的技术和技巧的更多相关文章

  1. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

    1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...

  2. 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步

    1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...

  3. 移动端IM开发需要面对的技术问题

    1.前言 这两年多一直从事网易云信 iOS 端 IM SDK的开发,期间不断有兄弟部门的同事和合作伙伴过来问各种技术细节,干脆统一介绍下一个IM APP的方方面面,包括技术选型(包括通讯方式,网络连接 ...

  4. 术语-软件-软件开发:SDK(软件开发工具包)

    ylbtech-术语-软件-软件开发:SDK(软件开发工具包) 软件开发工具包(缩写:SDK.外语全称:Software Development Kit)一般都是一些软件工程师为特定的软件包.软件框架 ...

  5. 《ArcGIS Runtime SDK for Android开发笔记》

    开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...

  6. 《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述

    1.前言 ArcGIS Runtime SDK是一整套用于构建原生及跨平台的地图应用程序的开发包,包括移动设备的Android.iOS.Windows Phone,针对桌面的.Net.Java.OSX ...

  7. 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用

    1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...

  8. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  9. Atitit 开发2d游戏的技术选型attilax总结

    Atitit 开发2d游戏的技术选型attilax总结 1.1. 跨平台跨平台:一定要使用跨平台的gui技术,目前最好的就是h5(canvas,webgl,dom) +js了..1 1.2. 游戏前后 ...

  10. Web 开发中应用 HTML5 技术的10个实例教程

    HTML5 作为下一代网站开发技术,无论你是一个 Web 开发人员或者想探索新的平台的游戏开发者,都值得去研究.借助尖端功能,技术和 API,HTML5 允许你创建响应性.创新性.互动性以及令人惊叹的 ...

随机推荐

  1. Flask 框架:运用Echarts绘制图形

    echarts是百度推出的一款开源的基于JavaScript的可视化图表库,该开发库目前发展非常不错,且支持各类图形的绘制可定制程度高,Echarts绘图库同样可以与Flask结合,前台使用echar ...

  2. 从SVN导出项目出现的乱码问题

    解决的方法很简单,只需要将Eclipse的编码标准设置为UTF-8即可 1.Window->Preferences->General->Workspace   面板Text file ...

  3. 关于Vue多线程的思考

    在前端调用的时候,我们难免需要同一时刻向后端请求多组数据或是总是期待着是否存在一个独立的线程去处理一系列的数据.线程相应,资源的抢占这是前端较为麻烦的点.这里就来聊聊我在前端踩的坑. 首先是线程问题说 ...

  4. C语言------结构体和共用体

    仅供借鉴.仅供借鉴.仅供借鉴(整理了一下大一C语言每个章节的练习题.没得题目.只有程序了) 文章目录 1 .实训名称 2 .实训目的及要求 3.源代码及运行截图 4 .小结 1 .实训名称 实训8:结 ...

  5. 字符串匹配(BF算法和KMP算法及改进KMP算法)

    #include <stdio.h> #include <string.h> #include <stdlib.h> #include<cstring> ...

  6. Go | 基本数据类型的相互转换

    基本数据类型的相互转换 Go在不同类型的变量之间赋值时需要显示转换,不能自动转换 基本语法 表达式 T(v): 将值v转换成类型T T就是数据类型: int32, int64, float32... ...

  7. Spring Cloud 整合 nacos 实现动态配置中心

    上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实 ...

  8. Flutter 构建windows应用

    Flutter Windows 桌面端支持进入稳定版 | Flutter 中文文档 | Flutter 中文开发者网站 从2.10之后的版本,flutter已经正式支持构建windows应用.不过距离 ...

  9. cordon节点,drain驱逐节点,delete 节点

    目录 一.系统环境 二.前言 三.cordon节点 3.1 cordon节点概览 3.2 cordon节点 3.3 uncordon节点 四.drain节点 4.1 drain节点概览 4.2 dra ...

  10. 【Azure API 管理】Azure APIM服务集成在内部虚拟网络后,在内部环境中打开APIM门户使用APIs中的TEST功能失败

    问题描述 使用微软API管理服务(Azure API Management),简称APIM. 因为公司策略要求只能内部网络访问,所以启用了VNET集成.集成方式见: (在内部模式下使用 Azure A ...