项目中使用ToolItem很方便,将ToolManager放在隐藏的div里面,然后通过页面生成的JavaScript函数来调用对应的ToolItem,这样可以有更大的自由度,方便布局和程序编程。不过貌似需要放在onmousedown这个事件中来调用,如果是onclick事件,调用后处理参数中e不会是1而返回。选择ToolItem很简单,在地图上的clientjs来画圆 多边形 点 线来返回对应的屏幕坐标,然后通过参数转换成对对应的图上坐标,然后通过查询functionality来进行查询显示。这里做个marker,方便以后查询。点选偷懒了,^_^。
1
ESRI.ArcGIS.ADF.Web.Geometry.Envelope maprect=null;2
3

4
//框选查询5
if (args is RectangleEventArgs)6

{7
RectangleEventArgs rectargs = (RectangleEventArgs)args;8
System.Drawing.Rectangle rect = rectargs.ScreenExtent;9
//矩形框left-bottom(最小值)10
ESRI.ArcGIS.ADF.Web.Geometry.Point minpoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(rect.Left, rect.Bottom, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);11
//矩形框right-top(最大值)12
ESRI.ArcGIS.ADF.Web.Geometry.Point maxpoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(rect.Right, rect.Top, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);13
//生成对应的地图范围(envelope)14
maprect = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(minpoint, maxpoint);15

16
}17
//点选查询18
else if(args is PointEventArgs)19

{20
PointEventArgs pea = (PointEventArgs)args;21
ESRI.ArcGIS.ADF.Web.Geometry.Point point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(pea.ScreenPoint.X,pea.ScreenPoint.Y, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);22
ESRI.ArcGIS.ADF.Web.Geometry.Point point2=new ESRI.ArcGIS.ADF.Web.Geometry.Point(point.X+1,point.Y+1);23
maprect = new ESRI.ArcGIS.ADF.Web.Geometry.Envelope(point, point2);24
}25

26
//多边形查询27
else if (args is PolygonEventArgs)28

{29
PolygonEventArgs polygonEventArgs = args as PolygonEventArgs;30
ESRI.ArcGIS.ADF.Web.Geometry.Ring points = new ESRI.ArcGIS.ADF.Web.Geometry.Ring();31
for (int i = 0; i < polygonEventArgs.Vectors.Length; i++)32

{33
ESRI.ArcGIS.ADF.Web.Geometry.Point point = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(polygonEventArgs.Vectors[i].X, polygonEventArgs.Vectors[i].Y, mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);34
points.Points.Add(point); 35
}36
maprect = ESRI.ArcGIS.ADF.Web.Geometry.Envelope.GetMinimumEnclosingEnvelope(points.Points); 37
}38

39
//圆选查询40
else if(args is CircleEventArgs)41

{42
CircleEventArgs circleEventArgs = args as CircleEventArgs;43
ESRI.ArcGIS.ADF.Web.Geometry.PointCollection points = new ESRI.ArcGIS.ADF.Web.Geometry.PointCollection();44
double degree;45
double rad = circleEventArgs.Radius;46
for (int i = 0; i < 359; i++)47

{ 48
degree = i * (Math.PI / 180);49
double x = circleEventArgs.CenterPoint.X + Math.Cos(degree) * rad;50
double y = circleEventArgs.CenterPoint.Y + Math.Sin(degree) * rad;51
ESRI.ArcGIS.ADF.Web.Geometry.Point nPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint((int)Math.Round(x),(int)Math.Round(y),mapctrl.Extent, (int)mapctrl.Width.Value, (int)mapctrl.Height.Value);52
points.Add(nPoint); 53
}54
maprect = ESRI.ArcGIS.ADF.Web.Geometry.Envelope.GetMinimumEnclosingEnvelope(points);55
56
}57

58
//开始查询59
ESRI.ArcGIS.ADF.Web.SpatialFilter spatialFilter = new SpatialFilter();60
spatialFilter.ReturnADFGeometries = false;61
spatialFilter.MaxRecords = 1000;62
spatialFilter.Geometry = maprect;63

64

65
int resourceindex = 2;//这里是查询的resourceid,写死了,可以更具session来保存66
System.Data.DataTable dt = null;67
ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mapFunction = mapctrl.GetFunctionality(resourceindex);68
ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gissource = mapFunction.Resource;69
if (gissource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)))70

{71
ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality queryFunction = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gissource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);72
string[] lids = null;73
string[] lnames = null;74
queryFunction.GetQueryableLayers(null, out lids, out lnames);75
int i = 0;76
for (int k = 0; k < lnames.Length; k++)77

{78
if (lnames[k].CompareTo(targetLayer) == 0)79

{ i = k; break; }80
}81
//dt=queryFunction.Query(null,lids[i],spatialFilter);//查询出的结果信息82
dt = queryFunction.Query(null, lids[i], spatialFilter);//查询出的结果信息83

84
}