ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ArcObjects SDK开发 icode9开发的技术和技巧

2022-12-26 18:48:34  阅读:279  来源: 互联网

标签:基本技术 icode9 Visual 编程 开发系统 


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

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

标签:基本技术,icode9,Visual,编程,开发系统,
来源:

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有