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. BigDecimal的运算——加减乘除

    BigDecimal的运算--加减乘除 1.初始化(尽量用字符串的形式初始化) BigDecimal num12 = new BigDecimal("0.005"); BigDec ...

  2. 在某网站的登录页面登录时如果选择“记住用户名”,登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页面中存在一个超链接,单击超链接可以链接到第三个页面查看信息。若选择“

    Response实现登录并记录用户名和密码信息 在某网站的登录页面登录时如果选择"记住用户名",登录成功后会跳转到一个中间层(页面代码将登录的用户名和密码存在cookie),中间页 ...

  3. OpenStack云计算平台框架

    概:  OpenStack是包含很多独立组件的一个云计算平台框架.在安装组件前,需要先将框架搭建出来,才能向其中放置组件. 搭建open stack云计算平台框架 一.安装open stack云计算平 ...

  4. Pytorch模型量化

    在深度学习中,量化指的是使用更少的bit来存储原本以浮点数存储的tensor,以及使用更少的bit来完成原本以浮点数完成的计算.这么做的好处主要有如下几点: 更少的模型体积,接近4倍的减少: 可以更快 ...

  5. 云小课|MRS基础原理之MapReduce介绍

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:MapReduce ...

  6. KatalonRecorder系列(一):基本使用+XPath元素定位

    一.简介 Katalon Recorder是基于selenium的浏览器插件,支持火狐和chrome.可以录制web上的操作并回放,还能导入导出脚本. 二.安装 可在谷歌商店或者火狐附件组件中搜索并选 ...

  7. 图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)

    项目链接:https://aistudio.baidu.com/aistudio/projectdetail/4990947?contributionType=1 欢迎fork欢迎三连!文章篇幅有限, ...

  8. [排序算法] 堆排序 (C++)

    堆排序解释 什么是堆 堆 heap 是一种近似完全二叉树的数据结构,其满足一下两个性质 1. 堆中某个结点的值总是不大于(或不小于)其父结点的值: 2. 堆总是一棵完全二叉树 将根结点最大的堆叫做大根 ...

  9. <七>深入理解new和delete的原理

    new ,delete 运算符 int *p =new int; delete p; 看一下汇编代码 可以看到new 和delete 运算符其实也是 operator运算符重载函数的调用 malloc ...

  10. .NET MAUI 安卓应用开发初体验

    一..NET MAUI开发环境搭建&安卓SDK和安卓模拟器安装提示网络连接失败问题解决 引言 本节目标是帮助第一次搭建.NET MAUI开发环境,在下载安卓SDK和安卓模拟器过程中一直提示网络 ...