我所知道的ArcObjects开发(转)

我所知道的ArcObjects开发(转)

接触ArcGIS也就一年的时间,学习ArcObjects开发也就从今年开始的,现在也就算基本入门了。学习过程中有很多感触,不吐不快。本人文笔不行,写不出优美的篇章,只有退而求其次用口语的风格描绘自己的感悟了,不过应该不会影响思想的交流的,呵呵。
      学习过程中遇到了很多困难,资料倒是很充足的,但是就因为资料太多了,不知道从哪里下手。我也很理解新手上路遇到的困难,所以想把自己学习过程中遇到的问题和收获呈现给大家。

      关于编程语言
       自从学习语言一来我都比较青睐VB的,所以到目前为止我也是在用VB开发,不过以后还是打算转到.NET开发的。其实我觉得语言不是重点,只要学好了一门语言,以后根据工作和兴趣的需要转到别的编译环境应该的比较容易的了,所以对于新手来说,就不要在选择语言方面犹豫不决了,选定一门语言以后,就一如既往的走下去,不要游离在编程语言上,浪费太多的时间,坚持!!!不过如果主要是做 ArcObjects开发的话,还是选择VB,VB.NET或者是C#.NET之一比较好。因为看看ESRI官方论坛上别人的提问就知道,跟别人学吧,我也说不出好的理由。但是ESRI对它们的支持应该是最好的了,有很多的示例代码可供模仿学习的。
       现在很流行一个论调就是VB没有技术含量,我就纳闷了。我觉得二次开发最重要的应该是效率问题,你能在有限的时间开发出你的产品用的实际工作中,这就是产品的价值,为什么还追求什么技术含量呢?难道那些不容易上手的,学习起来困难的东西就是技术含量?技术的发展最主要还应该看它的实用性,它实用,可以解决实际生活中的困难,我们就应该肯定它!

     关于GIS软件
      GIS软件很多,GIS二次开发平台也是很多,我学习的是ArcObjects,所以主要也是讲解ArcObjects的开发。
      我想附带的介绍下当前流传很广的开源GIS项目SharpMap(http://www.iter.dk/  SHARPMAP开源主页),访问主页可以下载到这个项目的源代码。
      关于这个项目的详细的介绍可以参考博客园Mars的自语的博客:
      http://www.cnblogs.com/maweifeng/archive/2006/02/24/337181.aspx
       所谓开源GIS,比如我们做ArcObjects的时候,用到了很多库(esriCarto.olb等等),都是ESRI封装好了的,我们只可以用它包含的接口和类,但是开源GIS就公开了这些库的代码,关于这些类库里面的接口和类的定义我们都可以查看到,所以对那些喜欢做底层开发的人来说是个好消息。
      ArcObjects开发的学习资源
        对于刚开始接触ArcObjects开发的人,以下的资源是很宝贵的了。 ArcGISHome代表的是你安装arcgis软件和开发包的路径,那么在ArcGISHome有个DeveloperKit文件夹就是开发资源库了。里面有个addins文件夹包含很多编程时的工具,双击RegisterVBAddIns.EXE注册这些文件,那么在你的编译环境下的addins相关目录下有这些功能的菜单了,比如自动给你的工程添加相关引用等等。Diagrams文件夹就是开发用到的很多接口和类的关系图,可以帮助你了解它们之间错综复杂的关系。包含sample字样的文件夹里面就是很多的示例代码,多读读别人的代码,模仿别人的代码是很有效的学习方法了。tools文件夹里面的工具,自己慢慢试试就知道了。
      还有就是开发帮助文档,要经常查看。从开始菜单->程序->arcgis->develop help下面有几个帮助文档,都打开看看。帮助文档的arcobjects library reference结点下的内容要经常看。
      这个是安装后的资源,我们还可以要好好利用网络资源。
      ESRI 北京论坛:要多去看看(http://bbs.esrichina-bj.cn/
      ESRI官方EDN(英文版):http://edndoc.esri.com/arcobjects/9.2/welcome.htm

 

 学习arcobjects的开发,一个重要的前提就是要掌握ARCGIS产品的体系结构。下图对熟悉ARCGIS产品的体系结构是很有帮助的。

      初学者肯定对很纳闷arcgis的产品术语好多,都搞糊涂了,又是AO,AE,ARCINFO,ARCVIEW,ARCSDE,它们到底是什么关系呢。

     ARCGIS数据
arcgis的GIS数据主要有shapefile格式,coverage格式,geodatabase格式和arcsde数据库。

空间数据的存储,arcgis存储空间数据有两种方式:文件的方式存储和数据库存储。
文件存储:就是用文件系统存储GIS数据,比如shapefile,coverage
geodatabase格式比较特殊,有用文件系统存储和用access数据库存储的。
数据库系统存储:比如sql server,oracle数据库存储GIS数据,但是要访问这些数据需要用到空间数据引擎arcsde。用文件存储的GIS数据就不需要用到arcsde。

      应用端软件
数据合理的存储了,就要通过合适的渠道应用它们。也是参看上图,主要是四大块:desktop gis,enbedded gis,server gis和mobile gis。

      desktop gis:
桌面GIS根据包括功能的不同有分为: arcview,arceditor和arcinfo。
就是因为ESRI公司根据用户的实际用途的需求分不同层次发布不同权限的软件产品。
arcview:主要是地图输出和简单分析
arceditor:添加了数据的编辑功能,可以进行数据的再生产。
arcinfo:涵盖了arcgis产品的所有功能,包括geoprocessing tools等。
arcview->arceditor->arcinfo是功能逐步增多的关系,当然软件产品的价格也是逐步升高。

arcgis desktop产品子模块:ArcMap,ArcCatalog,ArcGlobe,ArcScene,ArcToolBox。
ArcMap:主要是查看GIS数据,编辑GIS数据,地图输出等功能。在ArcMap添加GIS数据后可以保存为一个mxd后缀名的文档,它记录的是当前文档打开的数据的“引用“,记录添加的数据存储的位置等,还保存每个图层的symbol,地图输出的布局,添加的Elements等信息,但是它不包含实际的空间信息。
ArcCatalog:类似于windows的资源管理器,可以进行GIS数据的创建,比如新建一个GEODATABASE,在GEODATABASE中新建图层等,还有很多其它的功能。
ArcToolBox:它没有自己的窗体界面,可以作为ArcMap或者ArcCatalog的一个浮动工具条而存在,但是它的功能是不容小视的。可以进行不同格式数据的装换,各式各样的空间分析。
关于桌面产品的详细说明可以参考安装桌面软件以后的desktop help和pdf文档(using arcmap,using arccatalog etc)。
其它的3D扩展模块的功能可以参考帮助。

      ArcObjects开发
仔细看上图,有三个红色的椭圆标注了三个开发形式的名称:The ArcGIS Desktop Developer Kit,The ArcGIS Engine Developer Kit,The ArcGIS Server Developer Kit。它们都是基于AO的组件集,可以把AO比作积木中的最小的元素,我们可以用它们制造一个房子(就是应用程序)。
            ---AO组件比作材料(水泥,荒沙,钢筋)
           ---开发包比作模具(做好的窗户,门,大块的砖)
            ---应用程序比作房子
用户要盖一个房子就比较的方便了,不用自己做门窗等,只要把它们合理的组合起来就可以了。

这就涉及到组件的一个“粒度”大小的问题,比如AO组件是最原始的建筑材料,那么你会提供什么粒度大小的东西给程序员进行二次开发呢?是做好的门窗,墙壁砖,还是一个个的小房子,只要进行合理的组合就是一套别墅?后者的粒度肯定是比前者大了!ESRI提供的应该是门窗大小粒度的,粒度越小,给开发者自由发挥的余地就越是大,但是开发难度就越大!

那么ArcGIS desktop产品就是ESRI公司的员工给我们提供的“房子”,但是有的用户可能想:这个房子不是我要的,或者说你提供的房子造价太高,我们消费不起,而且很多配套设施我不需要。可以!!!ESRI公司很聪明,那我提供模板你自己盖吧,就有了下面的三种“盖房子”的形式。

The ArcGIS Desktop Developer Kit:在desktop软件的基础上添加功能。好比用户不满意ESRI提供的房子,觉得不适合自己的口味,这样用户可以定制自己的功能,所有的功能都是在以前房子的基础上。

The ArcGIS Engine Developer Kit和The ArcGIS Server Developer Kit:用户买不起房子或者是觉得买那个房子不划算,因为那个房子的很多设施用户不想购买,可以!那用户可以购买ESRI提供的建筑材料自己盖房子。


参考文献:
What is Arcgis
Getting Start with Arcgis

posted on 2009-04-07 10:25  大胡子青松  阅读(591)  评论(0编辑  收藏  举报

导航