Arcgis Server系列 ADF的开发与实例
在Arcgis Server学习过程中,大家也许最先使用的就是用自带的ADF进行初步的Server开发.总的来说,ADF算是一个比较强大的Web服务器端控件.为我们封装了大量的代码和客户端操作.从而降低了我们的开发难度.不过,由于我用的是Arcgis Server9.0.其自带的ADF还存在这一些问题,造成了所开发的项目的一些问题,这些问题往往会造成整个项目的失败和遗憾.在这个文章的最后,我会一一指出我所碰到的ADF的缺陷.
首先,我们需要安装一个ADF安装包.安装过程很简单.这里就不在说明了.
安装完以后,它会自动在Visual Studio里面建立一些模板,有关于地图浏览的,专题图制作的,缓冲查询的,还有Web Service的等等.这里,我只随便举一个作为例子.因为我个人还是推荐不使用ADF的开发方式.
ADF的开发步骤:
1.通过模板新建工程.(或者自己新建工程,把MapControl对象拖入页面).
2.在MapContorl对象和一些相关对象里面设置一些基本属性,如Host,ServerObjcet.等.
3.在Impersonation对象里面设置好用户,从而使得能有权限访问该页面.(这里还有一种方法,在WebConfig里面设置<identity impersonate="true" userName="xxx" password="xxx" />也可以解决权限问题.)
4.开发相应的功能.
这里用缓冲查询模板作为例子吧,因为缓冲查询是每个GIS项目中肯定会用,而且有些相对有点需要注意的地方.
该模板使用后如下(只需要配置Host,ServerObject,Impersonate就形成了下面的界面):
这个模板实现是的选择一个图层中的一个要素,然后根据这个要素来缓冲查询任意一个图层的要素.通过这个实例,我向大家慢慢讲解一些AO中的一些基础类和接口.并针对它们的大致用途作一个讲解.具体使用则可以参照模板,以后的文章中会陆续介绍.
ServerConnection:用于连接Arcgis Server服务器.
IMapServer:开发Arcgis Server项目中使用频率最高的接口之一.用于封装服务器对象.一些查询,计算距离和比例尺等功能都在该接口下.
IServerContext:服务器上下文对象.需要用它来创建AO对象.并用WebObject管理其生命周期.
IMapDescription:地图的状态.由于Arcgis Server是无状态的.当我们需要保存状态的就是就在Session中保存它就可以了.此外,它还代表Arcmap中所配置的mxd的信息.
IImageDisplay:描述地图的大小和分辨率.
IMapExtent:描述地图的范围.放大缩小地图有3种方法,其中之一就是使用该接口.
IMapServerInfo:地图服务的一些基本信息.保存范围,单位等.
IEnvelope:一个矩形区域.每个空间要素都存在一个它周边的矩形区域.
IDSList:保存整形数据的数据结构.这里用来保存FID.注意,如果你是访问的Shape文件,则是FID为GIS默认空间主键.从0开始自动增长.如果是访问的Oracle空间库,则变为OBJECTID.从1开始自动增长.
IFIDSet::保存FID列表.
IFeatureExtent:一个空间要素的范围.多边形和线段的范围都很好判断,点则很麻烦.一般在定位到一个空间要素的时候,如果是多边形或者线段,直接把当前地图范围设置为该要素的范围就行了.如果是点,则需要你手工输入范围.
IFields:字段信息.
IFeature:一个空间要素的信息.
ILayerDescription:图层的信息.该图层信息是指在Arcmap中所配置的图层的信息.而不是指物理图层.切记!
IGeometry:代表空间对象.
ISpatialFilter:空间查询接口.比如查询某个范围内的实体就用这个接口.
IQueryFilter:查询接口.一般对应属性查询.
IRgbColor:在AO中的管理颜色的接口.可以通过Converter类来和.NET的Color类进行转换.
IRecordSet:在AO中的数据集.也可以通过Converter类和.NET中的Dataset进行转换.
经过上面的描述,相信大家看代码会清晰了许多.如果有什么不懂的可以直接问我.这里我就不把代码列出来解释了..因为使用ADF开发是很简单的.稍微麻烦的就是如果使用AO的对象进行功能组合.
为什么最开始我不推荐使用ADF进行开发,因为,一.ADF是全屏刷新,不支持当前流行的ajax.在界面上和性能上都很受影响.二,由于ADF封装的原因,在把MapControl放在一些界面元素上会出现一些问题.三,ADF的可控性不大.都是封装好了的代码.一些效果上没有自己实现那么方便.
下面的文章中,我会向大家展示如何舍弃ADF,而直接使用AO的对象来开发Arcgis Server应用.
首先,我们需要安装一个ADF安装包.安装过程很简单.这里就不在说明了.
安装完以后,它会自动在Visual Studio里面建立一些模板,有关于地图浏览的,专题图制作的,缓冲查询的,还有Web Service的等等.这里,我只随便举一个作为例子.因为我个人还是推荐不使用ADF的开发方式.
ADF的开发步骤:
1.通过模板新建工程.(或者自己新建工程,把MapControl对象拖入页面).
2.在MapContorl对象和一些相关对象里面设置一些基本属性,如Host,ServerObjcet.等.
3.在Impersonation对象里面设置好用户,从而使得能有权限访问该页面.(这里还有一种方法,在WebConfig里面设置<identity impersonate="true" userName="xxx" password="xxx" />也可以解决权限问题.)
4.开发相应的功能.
这里用缓冲查询模板作为例子吧,因为缓冲查询是每个GIS项目中肯定会用,而且有些相对有点需要注意的地方.
该模板使用后如下(只需要配置Host,ServerObject,Impersonate就形成了下面的界面):
ServerConnection:用于连接Arcgis Server服务器.
IMapServer:开发Arcgis Server项目中使用频率最高的接口之一.用于封装服务器对象.一些查询,计算距离和比例尺等功能都在该接口下.
IServerContext:服务器上下文对象.需要用它来创建AO对象.并用WebObject管理其生命周期.
IMapDescription:地图的状态.由于Arcgis Server是无状态的.当我们需要保存状态的就是就在Session中保存它就可以了.此外,它还代表Arcmap中所配置的mxd的信息.
IImageDisplay:描述地图的大小和分辨率.
IMapExtent:描述地图的范围.放大缩小地图有3种方法,其中之一就是使用该接口.
IMapServerInfo:地图服务的一些基本信息.保存范围,单位等.
IEnvelope:一个矩形区域.每个空间要素都存在一个它周边的矩形区域.
IDSList:保存整形数据的数据结构.这里用来保存FID.注意,如果你是访问的Shape文件,则是FID为GIS默认空间主键.从0开始自动增长.如果是访问的Oracle空间库,则变为OBJECTID.从1开始自动增长.
IFIDSet::保存FID列表.
IFeatureExtent:一个空间要素的范围.多边形和线段的范围都很好判断,点则很麻烦.一般在定位到一个空间要素的时候,如果是多边形或者线段,直接把当前地图范围设置为该要素的范围就行了.如果是点,则需要你手工输入范围.
IFields:字段信息.
IFeature:一个空间要素的信息.
ILayerDescription:图层的信息.该图层信息是指在Arcmap中所配置的图层的信息.而不是指物理图层.切记!
IGeometry:代表空间对象.
ISpatialFilter:空间查询接口.比如查询某个范围内的实体就用这个接口.
IQueryFilter:查询接口.一般对应属性查询.
IRgbColor:在AO中的管理颜色的接口.可以通过Converter类来和.NET的Color类进行转换.
IRecordSet:在AO中的数据集.也可以通过Converter类和.NET中的Dataset进行转换.
经过上面的描述,相信大家看代码会清晰了许多.如果有什么不懂的可以直接问我.这里我就不把代码列出来解释了..因为使用ADF开发是很简单的.稍微麻烦的就是如果使用AO的对象进行功能组合.
为什么最开始我不推荐使用ADF进行开发,因为,一.ADF是全屏刷新,不支持当前流行的ajax.在界面上和性能上都很受影响.二,由于ADF封装的原因,在把MapControl放在一些界面元素上会出现一些问题.三,ADF的可控性不大.都是封装好了的代码.一些效果上没有自己实现那么方便.
下面的文章中,我会向大家展示如何舍弃ADF,而直接使用AO的对象来开发Arcgis Server应用.