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. 微信小程序开发优化

    一.开发优化一 1.使用Vant Weapp 1.1 什么是Vant Weapp Vant Weapp官网链接 Vant Weapp是有赞前端团队开源的一套小程序UI组件库,助力开发者快速搭建小程序应 ...

  2. Hive之命令

    Hive之命令 说明:此博客只记录了一些常见的hql,create/select/insert/update/delete这些基础操作是没有记录的. 一.时间级 select day -- 时间 ,d ...

  3. Codeforces Round #801 (Div. 2) C(规律证明)

    Codeforces Round #801 (Div. 2) C(规律证明) 题目链接: 传送门QAQ 题意: 给定一个\(n * m\)的矩阵,矩阵的每个单元的值为1或-1,问从\((1,1)\)开 ...

  4. 【做题笔记】CSP-S 往年试题

    题单 本文章正在持续更新-- [2021] 廊桥分配 题目 题面描述 所有飞机分为两类--国内区和国际区,两区廊桥数量互不干扰.每架飞机遵循"先到先得"的原则,优先选择编号最小的廊 ...

  5. Vue学习之--------内置指令的使用【v-bind、v-model、v-for、v-on、v-if 、v-else、v-show、v-text。。。】(2022/7/19)

    文章目录 1.常见的内置指令 2.代码实例 3.测试效果 1.常见的内置指令 v-bind: 单向绑定解析表达式, 可简写为 :xxx v-model: 双向数据绑定 v-for : 遍历数组/对象/ ...

  6. LcdTools如何添加图片画面到PX01显示

    LcdTools打开点屏工程,切到"画面设置"栏,在"画面资源"栏选择"Picture"画面,先设置图片ID编号(此编号用于PG对图片编号, ...

  7. ES6 学习笔记(九)Set的基本用法

    1 基本用法 set类似于数组,它的成员是唯一的,当有多个相同的值,只会保留一份. 1.1 创建方法 Set本身是一个构造函数,用来生成Set实例,如: const s = new Set() let ...

  8. Java学习之Filter与Listener

    0x00前言 web中的Filiter:当客户端访问服务端资源的时候,过率器可以把请求拦截下来,完成一些特殊的功能 完成的操作一般都是通用的作用:列如登录验证. web中的Listener一般用于加载 ...

  9. 嵌入式-C语言基础:指针是存放变量的地址,那为什么要区分类型?

    指针是存放变量的地址,那为什么要区分类型?不能所有类型的变量都用一个类型吗?下面用一个例子来说明这个问题. #include<stdio.h> int main() { int a=0x1 ...

  10. CSP-J2022 题解报告

    \(CSP-J2022\) 题解报告 \(T1\) 乘方: 发现 \(2^{32}>10^9\),所以这个题只需要特判 \(a=1\) 的情况为 \(1\),其他直接枚举再判断即可. Code: ...