在Server .net 9.2中,随着arcgis server的应用的多数据源模式的推出,导致了arcgis server必须提供一些能够支持各种数据源的类库,这也就是现在的.net adf的类库。因为这些类库和adf中提供的控件联系非常紧密,因此会在我们arcgis server的开发过程中频繁的使用到。
附图中的所列出来的类是ArcGIS Server为我们提供的所有的类, Common APIs ESRI.ArcGIS.ADF.Web ESRI.ArcGIS.ADF.Web.DataSouces ESRI.ArcGIS.ADF.Web.Datasouces.ArcGISServer ESRI.ArcGIS.ADF.Web.DataSouces.ArcWebService ESRI.ArcGIS.ADF.Web. DataSouces.Graphics ESRI.ArcGIS.ADF.Web.. DataSouces.IMS ESRI.ArcGIS.ADF.Web.. DataSouces.OGCWMSService ESRI.ArcGIS.ADF.Web..UI.WebControls Specific APIs ESRI.ArcGIS.ADF ESRI.ArcGIS.ADF.ArcGISServer ESRI.ArcGIS.ADF.ArcGISServer.Editor ESRI.ArcGIS.ADF.ArcWebService ESRI.ArcGIS.ADF.IMS ESRI.ArcGIS.ADF.Connection ESRI.ArcGIS.ADF.Tasks 除了上面列出的这些之外的其他类库都是属于Specific APIs。 Web ADF通过Common APIs来到达相应的Specific APIs。 先来看Common APIs: ESRI.ArcGIS.ADF.Web.DataSouces:包含了为各种数据源用来实现的Common APIs的各种基本接口,比如IGISDataSouce,IGISResouce,IGISFunctionality等。 ESRI.ArcGIS.ADF.Web.Datasouces.ArcGISServer:里面包含的类基本上是ESRI.ArcGIS.ADF.Web.DataSouces中接口的一种实现,这些类就是web Adf中针对ArcGIS Server这种数据源的Common APIs. ESRI.ArcGIS.ADF.Web.DataSouces.ArcWebService:里面包含的类基本上是ESRI.ArcGIS.ADF.Web.DataSouces中接口的一种实现,包含了web Adf中针对ArcWebService 这种数据源的Common APIs. 其他几个依次类推。 各个库中的类的名称可能是相同的,比如MapFunctionality就在 ESRI.ArcGIS.ADF.Web.Datasouces.ArcGISServer ESRI.ArcGIS.ADF.Web.DataSouces.ArcWebService ESRI.ArcGIS.ADF.Web. DataSouces.Graphics ESRI.ArcGIS.ADF.Web.. DataSouces.IMS ESRI.ArcGIS.ADF.Web.. DataSouces.OGCWMSService 各个库中都有,但是是针对不同的数据源的,这也就是支持多种数据源并且可以扩展自己的数据源的表现之一。 ESRI.ArcGIS.ADF.Web..UI.WebControls:包含了web adf为我们提供的各种控件类。
再来看看Specifics APIs: 各种Specifics APIs的库的内容比较明确,都是针对不同的数据源要使用到的特殊的类。从名称上大家都可以看出来. 比如ESRI.ArcGIS.ADF.ArcGISServer就是针对ArcGIS Server的Specific APIs, 其他以此类推 在从各种控件入手,进行任何的操作,首先都先接触到这些Common APIs,从Common APIs来判断是哪种数据源,然后着手进入Specific APIs。来看看下面一段代码: //从控件得到Functionality的集合 IEnumerable funcenum = Map1.GetFunctionalities(); foreach (IGISFunctionality gisfunc in funcenum) { //从functionality过得图层名称 IMapFunctionality mf = (IMapFunctionality)gisfunc; string[] layerids; string[] layernames; mf.GetLayers(out layerids, out layernames); //从functionality中获得resource资源 MapResourceLocal localRes = mf.Resource as MapResourceLocal; IMapServer pMapServer = localRes.MapServer; IMapServerObjects pMapServerObjects = pMapServer as IMapServerObjects; IFeatureLayer pFeatureLayer = pMapServerObjects.get_Layer(pMapServer.DefaultMapName, 0) as IFeatureLayer; } 首先从控件得到functionality,再从functionality得到resouce,根据resouce的类型我们就知道怎么去使用改resouce的specific APIs了,上面的例子得到Resouce的类型是MapResourceLocal,我们就可以进一步使用MapResourceLocal的Specific APIs――ArcObjects。 |