——远帆
2009-02-05
GIS开发分为二次开发,底层开发,组件开发。二次开发就是不脱离mapinfo,Arcgis的环境,使用VBA开发特定功能的程序底层就是不借助其它公司平台,自主开发实现组件开发和二次开发类似,就是使用AO/MO/MAPX等进行引用开发。
AO :ArcObjects,有上千个对象和接口,可以在其基础上开发出业界最强大的GIS应用程序。完全支持空间数据引擎。但由于运行时需要安装ArcGIS核心产品和开发时用到的扩展模块产品,软件发布成本不菲,其下一代产品ArcGIS Engine则有望解决这个问题。
AE - ArcGis Engine是一个创建定制的GIS桌面应用程序的开发产品。ArcGIS Engine包括构建ArcGIS产品ArcView, ArcEditor, ArcInfo, 和 ArcGIS Server.的所有核心组件。使用ArcGIS Engine可以创建独立界面版本(stand-alone)的应用程序,或者对现有的应用程序进行扩展。
MO - MapObjects,只有十多个对象,用于简单的GIS应用程序开发,对空间数据引擎的支持度较低,但软件发布成本很低。
一分钱一分货,AO是主流,AO的分析功能比MO强,AO支持的格式更多,开发时的模式和可扩展性等等强些,当然也复杂多了。
MO使用简单,也很不错。 其实,如果非特别专业的、有些变态的要求,MO没问题的。MO也可以连接geodatabase的,建议你采用AO, 因为MO现在基本上已经没有新版本了。
AO其实是一组COM接口,适用于任何语言,如VC++,VB,DELPHI等开发语言,而MO是一个产品。AO不能独立存在,只要安装成功ARCGIS就可以使用AO开发,听说今后arcgis的版本中AO可以单独发行了。
AO是AE、ArcGIS Desktop、ArcGIS Server三者的集合,按功能AO大于AE大于MO,AO面向桌面扩展开发,需要有desktop支持,不能开发出独立发布的程序AE不需要desktop支撑,包括了AO中的大部分库,可以开发出独立发布的应用程序,MO功能简单,主要面向小型的系统开发如地图浏览,查询系统等等,或结合MIS系统运行。
如何学习AO,相信是很多人都关心的问题。相比MO而言,AO的入门门槛要高的多,首先是知道COM技术,AO编程使用的是COM组件技术标准,它使用接口定义,对象实现的方法,接口与类之间是多对多的关系。在MO中,一把钥匙开一把锁,而在AO中,一把钥匙可以开多把锁,一个锁也可能安装在很多门上,ArcGIS8.3版本已经高达2000多个接口,要了解这里面最常用的部分当然是“难之又难”。
什么是AO,按照ESRI的官方说法,AO就是ARCGIS大部分软件的组成组件,它是构成ArcMAP,ArcCATALOG和一部分 ArcToolBox的基础。从ARCGIS8开始,ESRI决定使用COM技术重新构建他们的技术,使用COM技术将整个GIS系统组合起来,这部分工作从1999年就开始,但是到现在都没有完全结束事实上,我在学习AO的过程中,发现了无数不可思议的地方和明显违反命名默认规则的例子,但是没有办法。
对于高级的AO程序设计人员我想必须跨越四大技术障碍:
1. 面向对象技术思想;
2. COM技术;
3. AO各组件对象的层次组织和相互关系;
4. 支持COM的各种开发工具及其环境(如VB、VC、DEPHI等)
真正属于ESRI自己的东西无非就是这套AO组件库。对于初次进入AO开发领域的人员来说,我个人觉得(至于COM还有其它暂时可以先放一边,照猫画虎完成许多任务还是没有问题的了)可以先从ArcGIS Desktop的应用开始,对AO的层次及相关概念有一个了解(如Map、Layer、View、Label、支持的数据格式等)
AO开发资源
1.《ArcObjects Developer Help》 ----- 这是AO开发的首选资源,个人觉得一定程度上甚至可以和微软的MSDN相媲美。不管是AO的基础COM、AO的对象层次图都提供了说明,此外还提供了大量的开发示例。
2.《ArcObjects Online》 ----- 提供了最新的AO组件库文档,其中有一个关于AO的技术论坛相信会让大家有很多意外的收获;
3.《Exploring ArcObjects》 -----一本很不错的AO技术文档,对AO的开发进行了很好的组织,而且有大量的示例,可以随时复制利用;
4.《Building a Geodatabase》 -----应用都是围绕数据来展开的,这本书主要是用来设计和创建Geodatabase的,但理解和掌握Geodatabase的层次和建摸方法,对AO的开发是很好的补充。
5.《Microsoft MSDN》----即使你的AO开发工具不是微软的,也建议安装一套完整的MSDN,想多了解和应用COM进行设计开发,MSDN是个宝藏。
终于开始COM了我想许多AO的开发者对此都会有不同的感受。COM是Microsoft的Component Object Model缩写,它不仅定义了组件程序之间进行交互的标准,而且也提供了组件程序运行所需要的环境(COM本身要实现一个称为COM库(COM library)的API,它提供诸如客户对组件的查询,以及组件的注册/反注册等一系列服务,一般来说,COM库由操作系统加以实现,我们不必关心其实现的细节,象大家经常看到的ActiveX,DirectX,OLEDB都是基于COM技术的),主要应用于Microsoft Windows操作系统平台上。COM通常的发布形式是:以win32动态链接库(DLL)或可执行文件(EXE)的形式发布。