arcgis server 学习(一) 地图要素查询

 进行地图要素查询分三步

1.获得Functionalities,从Funtionalities中获取需要的数据源

2.判断得到的数据源是否支持IQueryFunctionality接口,在支持的情况下定义一个IQueryFunctionality接口

3.利用得到的接口在自己定义的SpatialFilter条件下通过Query方法得到查询结果,结果为DataTable类型


 1 using  System;
 2 using  System.Data;
 3 using  System.Configuration;
 4 using  System.Web;
 5 using  System.Web.Security;
 6 using  System.Web.UI;
 7 using  System.Web.UI.WebControls;
 8 using  System.Web.UI.WebControls.WebParts;
 9 using  System.Web.UI.HtmlControls;
10 using  System.Collections;
11 using  ESRI.ArcGIS.ADF.Web.DataSources;
12 using  ESRI.ArcGIS.ADF.Web.UI.WebControls;
13 using  ESRI.ArcGIS.ADF.Web.UI;
14 using  ESRI.ArcGIS.ADF.Web;
15
16 ExpandedBlockStart.gifContractedBlock.gif /**/ /// <summary>
17/// CommonTool 的摘要说明
18/// </summary>

19 public   class  CommonTool
20 ExpandedBlockStart.gifContractedBlock.gif {
21
22ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <Query>
23    /// Query 的摘要说明
24    /// Map1为地图控件
25    /// layerName是要查询的图层名
26    /// queryStr为查询字符串
27    /// resourceName为数据源服务的Name
28    /// 整个函数完成的功能:
29    /// 查询指定的Map控件中指定数据源的指定图层中符合查询字符串的地图要素
30    /// 返回值为DataTable
31    /// </Query>

32    public DataTable Query(Map map1,string layerName,string queryStr,string resourceName)
33ExpandedSubBlockStart.gifContractedSubBlock.gif    {
34        //dt为返回值
35        DataTable dt;
36
37        //定义一个枚举接口存储地图控件的functionality
38        //IEnumerable接口定义于System.Colloction命名空间之下
39        // Map控件的GetFunctionality返回的是一个IMapFunctionality类型
40        // 而Map控件的GetFunctionalities返回的是一个IEnumerable类型
41        //IMapFunctionality在ESRI.ArcGis.ADF.Web.DataSource命名空间下
42        IEnumerable enumFunc = map1.GetFunctionalities();
43
44        //定义一个IGISResource接口类型的变量gisResource,存储要查询的数据源
45        IGISResource gisResource = null;
46        //遍历枚举中的每一个functionality     
47        foreach (IGISFunctionality gisFunc in enumFunc)
48ExpandedSubBlockStart.gifContractedSubBlock.gif        {
49            //获得每个functionality的源服务
50            if (gisFunc.Resource.Name == resourceName)
51ExpandedSubBlockStart.gifContractedSubBlock.gif            {
52                //将指定的数据源赋值给gisResource
53                gisResource = gisFunc.Resource;
54            }

55        }

56
57        //IGISResource接口的SupportFunctionality(type FunctionalityType)方法作用:
58        // 判断定义的数据源是否支持参数指定的FunctionalityType类型
59        bool support = gisResource.SupportsFunctionality(typeof(IQueryFunctionality));
60        if (support)
61ExpandedSubBlockStart.gifContractedSubBlock.gif        {
62            //在支持IQueryFunctionality的条件下,获得数据源的IQueryFunctionality接口并存储到qFunc
63            IQueryFunctionality qFunc;
64            qFunc = (IQueryFunctionality)gisResource.CreateFunctionality(typeof(IQueryFunctionality), null);
65
66            //定义两个字符串数组,用以存储图层的Id号,和图层名
67            string[] layerIdArray;
68            string[] layerNameArray;
69            //利用qFunc函数查询数据源的图层,并将Id号和图层名用out修饰符传出
70            qFunc.GetQueryableLayers(nullout layerIdArray, out layerNameArray);
71
72            //利用循环得到指定数据源的图层名为layerName的图层编号lid
73            int lid = 0;
74            for (int i = 0; i < layerName.Length; i++)
75ExpandedSubBlockStart.gifContractedSubBlock.gif            {
76                if (layerNameArray[i] == layerName)
77ExpandedSubBlockStart.gifContractedSubBlock.gif                {
78                    lid = i;
79                    break;
80                }

81            }

82            //定义一个空间过滤对象
83            //其位于ESRI.ArcGis.ADF.Web命名空间下
84            SpatialFilter spatialft = new SpatialFilter();
85            spatialft.ReturnADFGeometries = true;
86            //将查询字符串赋值给空间过滤的WhereClause属性
87            spatialft.WhereClause = queryStr;
88            //利用IQueryFunction接口qFunc传入最后得到的图层编号、空间过滤参数
89            //得到查询结果,其返回结果为一个DataTable
90            dt = qFunc.Query(null, lid.ToString(), spatialft);
91           //返回
92            return dt;
93        }

94    
95        //若数据源不支持IQueryFunction接口,则返回为空
96        return null;
97    }

98}

99
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections;
using ESRI.ArcGIS.ADF.Web.DataSources;
using ESRI.ArcGIS.ADF.Web.UI.WebControls;
using ESRI.ArcGIS.ADF.Web.UI;
using ESRI.ArcGIS.ADF.Web;

/// <summary>
/// CommonTool 的摘要说明
/// </summary>
public class CommonTool
{

    
/// <Query>
    
/// Query 的摘要说明
    
/// Map1为地图控件
    
/// layerName是要查询的图层名
    
/// queryStr为查询字符串
    
/// resourceName为数据源服务的Name
    
/// 整个函数完成的功能:
    
/// 查询指定的Map控件中指定数据源的指定图层中符合查询字符串的地图要素
    
/// 返回值为DataTable
    
/// </Query>
    public DataTable Query(Map map1,string layerName,string queryStr,string resourceName)
    {
        
//dt为返回值
        DataTable dt;

        
//定义一个枚举接口存储地图控件的functionality
        
//IEnumerable接口定义于System.Colloction命名空间之下
        
// Map控件的GetFunctionality返回的是一个IMapFunctionality类型
        
// 而Map控件的GetFunctionalities返回的是一个IEnumerable类型
        
//IMapFunctionality在ESRI.ArcGis.ADF.Web.DataSource命名空间下
        IEnumerable enumFunc = map1.GetFunctionalities();

        
//定义一个IGISResource接口类型的变量gisResource,存储要查询的数据源
        IGISResource gisResource = null;
        
//遍历枚举中的每一个functionality     
        foreach (IGISFunctionality gisFunc in enumFunc)
        {
            
//获得每个functionality的源服务
            if (gisFunc.Resource.Name == resourceName)
            {
                
//将指定的数据源赋值给gisResource
                gisResource = gisFunc.Resource;
            }
        }

        
//IGISResource接口的SupportFunctionality(type FunctionalityType)方法作用:
        
// 判断定义的数据源是否支持参数指定的FunctionalityType类型
        bool support = gisResource.SupportsFunctionality(typeof(IQueryFunctionality));
        
if (support)
        {
            
//在支持IQueryFunctionality的条件下,获得数据源的IQueryFunctionality接口并存储到qFunc
            IQueryFunctionality qFunc;
            qFunc 
= (IQueryFunctionality)gisResource.CreateFunctionality(typeof(IQueryFunctionality), null);

            
//定义两个字符串数组,用以存储图层的Id号,和图层名
            string[] layerIdArray;
            
string[] layerNameArray;
            
//利用qFunc函数查询数据源的图层,并将Id号和图层名用out修饰符传出
            qFunc.GetQueryableLayers(nullout layerIdArray, out layerNameArray);

            
//利用循环得到指定数据源的图层名为layerName的图层编号lid
            int lid = 0;
            
for (int i = 0; i < layerName.Length; i++)
            {
                
if (layerNameArray[i] == layerName)
                {
                    lid 
= i;
                    
break;
                }
            }
            
//定义一个空间过滤对象
            
//其位于ESRI.ArcGis.ADF.Web命名空间下
            SpatialFilter spatialft = new SpatialFilter();
            spatialft.ReturnADFGeometries 
= true;
            
//将查询字符串赋值给空间过滤的WhereClause属性
            spatialft.WhereClause = queryStr;
            
//利用IQueryFunction接口qFunc传入最后得到的图层编号、空间过滤参数
            
//得到查询结果,其返回结果为一个DataTable
            dt = qFunc.Query(null, lid.ToString(), spatialft);
           
//返回
            return dt;
        }
    
        
//若数据源不支持IQueryFunction接口,则返回为空
        return null;
    }
}
 1ExpandedBlockStart.gifContractedBlock.gif/**//// <Query>
 2    /// Query 的摘要说明
 3    /// Map1为地图控件
 4    /// layerName是要查询的图层名
 5    /// queryStr为查询字符串
 6    /// 整个函数完成的功能是在map1控件中查询layerName图层中符合queryStr条件的地图要素
 7    /// 返回值为DataTable
 8    /// </Query>

 9    public DataTable Query(Map map1,string layerName,string queryStr)
10ExpandedBlockStart.gifContractedBlock.gif    {
11ExpandedSubBlockStart.gifContractedSubBlock.gif        /**////<Query函数变量>
12        /// 
13        /// 
14        /// 
15        ///<Query函数变量/>
16        ///定义一个枚举接口存储地图控件的functionality
17        ///IEnumerable接口定义于System.Colloction命名空间之下
18        /// Map控件的GetFunctionality返回的是一个IMapFunctionality类型
19        /// 而Map控件的GetFunctionalities返回的是一个IEnumerable类型
20        ///IMapFunctionality在ESRI.ArcGis.ADF.Web.DataSource命名空间下

21        IEnumerable enumFunc = map1.GetFunctionalities();
22        DataTable dt;
23
24        //遍历枚举中的每一个functionality     
25        foreach (IGISFunctionality gisFunc in enumFunc)
26ExpandedSubBlockStart.gifContractedSubBlock.gif        {
27
28            //获得每个functionality的源服务
29            IGISResource gisResource = gisFunc.Resource;
30ExpandedSubBlockStart.gifContractedSubBlock.gif            /**////IGISResource接口的SupportFunctionality(type FunctionalityType)
31            /// 判断定义的接口变量是否支持参数指定的FunctionalityType类型

32            bool support = gisResource.SupportsFunctionality(typeof(IQueryFunctionality));
33            if (support)
34ExpandedSubBlockStart.gifContractedSubBlock.gif            {
35                IQueryFunctionality qFunc;
36                qFunc = (IQueryFunctionality)gisResource.CreateFunctionality(typeof(IQueryFunctionality), null);
37
38                string[] layerIdArray;
39                string[] layerNameArray;
40                qFunc.GetQueryableLayers(nullout layerIdArray, out layerNameArray);
41
42                int lid = 0;
43                for (int i = 0; i < layerName.Length; i++)
44ExpandedSubBlockStart.gifContractedSubBlock.gif                {
45                    if (layerNameArray[i] == layerName)
46ExpandedSubBlockStart.gifContractedSubBlock.gif                    {
47                        lid = i;
48                        break;
49                    }

50                    
51                }

52
53                SpatialFilter spatialft = new SpatialFilter();
54                spatialft.ReturnADFGeometries = true;
55ExpandedSubBlockStart.gifContractedSubBlock.gif                /**////将查询字符串赋值给空间过滤的WhereClause属性
56                spatialft.WhereClause = queryStr;
57
58               dt=qFunc.Query(null, lid.ToString(), spatialft);
59
60               return dt;
61            }

62        }

63
64        return null;
65    }

转载于:https://www.cnblogs.com/wooc/archive/2008/11/12/1332376.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值