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. css事件穿透

    代码: pointer-events: none; 解义:你可以看的到第一个元素,但是你看不到下面的元素着,点击第一个元素会穿透触发到第二个元素的元素

  2. 记一次 .NET 某电子病历 CPU 爆高分析

    一:背景 1.讲故事 前段时间有位朋友微信找到我,说他的程序出现了 CPU 爆高,帮忙看下程序到底出了什么情况?图就不上了,我们直接进入主题. 二:WinDbg 分析 1. CPU 真的爆高吗? 要确 ...

  3. 11.MongoDB系列之连接副本集

    1. Python连接副本集 from pymongo import MongoClient from bson.codec_options import CodecOptions from retr ...

  4. 解决console控制台反复打印“WebSocket connection to ws://localhost:9528/sockjs-node/107/uadaszgz.websocket failed:Invalid frame header

    element-admin-vue 项目console台一直报websocket连接失败 解决办法 1.vue.config.js中配置devServer.proxy的ws为false  (我没成功) ...

  5. Vue学习之---浏览器本地存储(8/17)

    博客园(纯干货):https://www.cnblogs.com/zheng-yuzhu/ 文章目录 1.基础知识 2.代码实例(localStorage.html) 3.测试效果 4.代码实例(se ...

  6. 使用ssm框架搭建的图书管理系统

    等下贴代码 学生图书管理系统 实现的功能: 1.图书信息查询(暂时未分页处理) 2.图书信息修改(点击保存按钮后返回修改后的图书信息界面) 3.删除一本图书(删除某一本书籍,在图书管理界面则不存在该条 ...

  7. go-zero docker-compose 搭建课件服务(一):编写服务api和proto

    0.转载 go-zero docker-compose 搭建课件服务(一):编写服务api和proto 0.1源码地址 https://github.com/liuyuede123/go-zero-c ...

  8. 6.channels 配置websocket

      Django默认不支持websockey,需要Django支持的话需要安装第三方组件 django channels 是django支持websocket的一个模块.   1.安装 pip3 in ...

  9. 完全背包问题 —— 贪心优化 DP 范围

    题意: 现在有 \(2n+1\) 个物品(\(n\le 300\)),体积分别为 \(-n,-n+1,\dots,-1,0,1,\dots,n\),第 \(i\) 个物品有 \(a_i\) 个,求选出 ...

  10. UE优化性能

    UE 优化 参考:风恋残雪的博客 Stat unit 启动一个非Debug的游戏进程 打开控制台输入 Stat UNIT .PC端 ` , Android 四指点击 正常的渲染状态: 名称 功能 Fr ...