ArcGIS Server .net来创建应用有三个层次,
1 使用manager来创建一个web应用
2 使用 .net模板来创建应用
3 使用adf来创建应用
对于一个项目开发来说,需要采用第三中方式来进行开发的,第一,第二中方式一般用于刚刚基础arcgis server的同志学习使用或者是非常简单的应用来使用的,使用adf来进行开发,弄清楚adf的体系结构就显的非常重要,否则就会象掉进arcobjects的巨多的组件堆里的感觉是一样的。在这个讲座中会讲到.Net ADF为我们提供了什么,我们该在ArcGIS Server.Net开发过程中怎么样有序的去使用它们。
以前我们的adf称为 Server adf,那是因为只有单一的数据源,即ArcGIS Server。而现在的是Web Adf,是针对多数据源的,可以是ArcGIS Server, ArcGIS IMs等。
Adf为我们提供的是控件和api。控件是提供用户界面,而common api和specific api的类来具体完成GIS的功能。
首先我们来看看控件,9.2 ADF的控件明显比以前版本复杂一些,除了我们常见的map,pagelayout,toc等控件之外,还出现了一系列的resoucemanager控件。这些控件的出现都是为支持多数据源的这个目标服务的,在解释控件的同时还会涉及到adf中的其他一些概念,这些概念都是贯穿adf的始终的。
1 Resouces,ResouceManager,webcontrols, functionality的关系。
首先我们来解释一下Resouces,ResouceManager,webcontrols, functionality的关系。
控件和数据源之间的关系是通过一系列的ResouceManager控件来维护的。ResouceManager决定哪些数据源是可以使用的Resouces,以及这些Resouces怎么样被控件所使用。一旦一个数据源被ResouceManager管理之后,就被展现为Resouces。控件通过Resouces到达数据源。Resouces可以把数据源以多种形式展现出来,比如可以提供一幅地图展现在map控件种,它也可以把数据源以图层列表的方式展现在toc控件中,也就是说Resource拥有不能的能力,这些不同的能力我们成为不同的functionaligy。
从控件角度来讲,不同的控件可以通过不同的方式来使用相同的数据源,比如一个Resouce可以为map控件提供一幅地图,也可以为toc控件提供一套图层的列表,这就Resouces的不同的functionality。
从数据源角度来讲,不同的Resouces会通用的展现一些能力,也就是提供不同的functionality,比如展现地图,查询地图等。
上面这些文字可能刚开始看起来比较费劲,但是对于使用.net开发的人来说一定要弄清楚这些关系。
2 Common APIs和specific APIs的关系
上面讲了Resouces可以展现为不同的能力,但是具体能够展现为哪些能力还是要看数据源本身能够提供什么样的功能。但是有一些能力是所有数据源都能办到的,也就是说Resouces可以展现出一些所有的数据源都可以提供的能力,比如提供地图,比如查询地图,无论是arcgis server作为数据源,还是arcims作为数据源,这些都是基本的能力。因此adf就把实现这些基本的普通的功能所需要的类归为Common APIs。而有些功能是有些数据源特有的,比如提供编辑功能,那是arcgis server特有的,arcims是无法提供的。这些就被称为specific APIs。
Specific APIs包括arcims api, arcweb api, ogc\wms api, arcgis server soap api, arcgis server arcobjects api,注意其中的arcobjects api也被列为了specific api了,它是arcgis server数据源的specific APIs。
3 Common APIs的基本结构,adf中如何来使用这些common APIs?
我们在开发过程中首先接触到的就是ADF中提供的这些Common APIs,而且它的结构比较明朗,不像Specific APIs那样多样。首先我们来看几个基本接口,
IGISDataSouce――定义了数据源的连接
IGISResouce――定义了datasouce提供的信息类型等
IGISFunctionality――定义了resouce怎么被使用
这三个接口是不同的数据源可以展现一些基本功能的基本接口,也就是说不同的数据源要实现基本的功能必须实现这三个基本的类,才能在控件上展现出那些基本的能力。各种数据源都用相应的类实现了这三个接口。
那首先来看一下这三个接口之间的关系,
一个GISDataSouce会包含一系列的GISResouces。GISDatasouce是一个比较大的概念,主要就包含了ArcGIS Server Local, ArcGIS Server internet ,ArcIms, WMS, ArcWeb这几种。那就拿ArcGIS Server Local来说吧,它包含了MapResouce, GeocodeResouce, GeoprocessingResouce几种。
一个GISResouce会包含一系列的GISFunctionality。Functionality定义了resouces怎么被使用。Functionality主要有两种mapfunctionality,queryfunctionality。Mapfunctionality主要展现resouce的地图能力,比如输出地图图片,改变地图范围,设置地图中图层的可见性等。而queryfunctionality主要展现resouce的数据的空间和属性查询能力。
刚才说了不同的数据源都有相应的类来实现上面的基本接口,那我们来看看arcgis server local这种数据源的相应的实现类:
IGISDataSouce ――GISDataSouceLocal
IGISResouce ――MapResouceLocal, GeocodeResouceLocal
IGISFunctionality ――MapFunctionality QueryFunctionality
这就是web adf的优势所在,它可以使得各种不同的数据源都展现为resouce, 使得它们可以以相同的方式得到使用。对于控件而言,每个resouce就象一个图层,而不管数据源是什么。
就举一个地图放大的功能,一个mapcontrol中有两个datasouce,一个是arcgis server local,一个是arcims, 地图的范围重新设定了之后,控件都通过每个resouces提供的mapfunctionality给每个resouces重新设定范围,每个resouces输出这个新的地图。而mapcontrol呢就负责把这些输出图片显示在同一个界面上。对于控件而言,每个resouce就象一个图层。从resouce可以到达datasouce本身。