进行地图要素查询分三步
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 /**/ /// <summary>
17/// CommonTool 的摘要说明
18/// </summary>
19 public class CommonTool
20 {
21
22 /**//// <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)
33 {
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)
48 {
49 //获得每个functionality的源服务
50 if (gisFunc.Resource.Name == resourceName)
51 {
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)
61 {
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(null, out layerIdArray, out layerNameArray);
71
72 //利用循环得到指定数据源的图层名为layerName的图层编号lid
73 int lid = 0;
74 for (int i = 0; i < layerName.Length; i++)
75 {
76 if (layerNameArray[i] == layerName)
77 {
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;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 /**/ /// <summary>
17/// CommonTool 的摘要说明
18/// </summary>
19 public class CommonTool
20 {
21
22 /**//// <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)
33 {
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)
48 {
49 //获得每个functionality的源服务
50 if (gisFunc.Resource.Name == resourceName)
51 {
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)
61 {
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(null, out layerIdArray, out layerNameArray);
71
72 //利用循环得到指定数据源的图层名为layerName的图层编号lid
73 int lid = 0;
74 for (int i = 0; i < layerName.Length; i++)
75 {
76 if (layerNameArray[i] == layerName)
77 {
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.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(null, out 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;
}
}
1/**//// <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)
10 {
11 /**////<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)
26 {
27
28 //获得每个functionality的源服务
29 IGISResource gisResource = gisFunc.Resource;
30 /**////IGISResource接口的SupportFunctionality(type FunctionalityType)
31 /// 判断定义的接口变量是否支持参数指定的FunctionalityType类型
32 bool support = gisResource.SupportsFunctionality(typeof(IQueryFunctionality));
33 if (support)
34 {
35 IQueryFunctionality qFunc;
36 qFunc = (IQueryFunctionality)gisResource.CreateFunctionality(typeof(IQueryFunctionality), null);
37
38 string[] layerIdArray;
39 string[] layerNameArray;
40 qFunc.GetQueryableLayers(null, out layerIdArray, out layerNameArray);
41
42 int lid = 0;
43 for (int i = 0; i < layerName.Length; i++)
44 {
45 if (layerNameArray[i] == layerName)
46 {
47 lid = i;
48 break;
49 }
50
51 }
52
53 SpatialFilter spatialft = new SpatialFilter();
54 spatialft.ReturnADFGeometries = true;
55 /**////将查询字符串赋值给空间过滤的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 }