1、选中feature并高亮显示 2008-07-10 15:28 protected void cmdSelect_Click(object sender, EventArgs e) { // SelectFeatures(Map1.Extent); SelectFeatures(); } public void SelectFeatures() { #region /* IEnumerable func_enum = null
2、 //获取当前map1控件中所有的functionality func_enum = Map1.GetFunctionalities(); System.Data.DataTable datatable; //对所有的functionality进行遍历 foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality in func_enum) {
3、 ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = null; //得到该functionality的resource gisresource = gisfunctionality.Resource; //判断该resource是否支持IQueryFunctionality bool supported = false; supported = gisresource
4、SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)); if (supported) { ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc; qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresou
5、rce.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null); string[] lids; string[] lnames; //获得图层的layerId和layerName,GetQueryableLayers的重载方法可以指定图层类型 qfunc.GetQueryableLayers(null, out lids,
6、out lnames); ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter(); //设置过滤器的过滤条件,txtQuery就是panel中text box的ID spatialfilter.ReturnADFGeometries = false; spatialfilter.MaxRecords = 1000;
7、 spatialfilter.WhereClause = txtQuery.Text; spatialfilter.Geometry = geometry; //对指定的图层进行查询,查询的结果保存为DataTable datatable = qfunc.Query(null, lids[0], spatialfilter); TreeViewPlus1.Nodes.Clear();
8、 if (datatable != null) { System.Data.DataSet ds = new System.Data.DataSet(); ds.Tables.Add(datatable); TreeViewPlus1.ShowClearAllButton = false; //将结果绑定到TreeViewPlus控件上
9、 TreeViewPlus1.BindToDataSet(ds); TreeViewPlus1.Nodes[0].Expanded = true; } } } */ #endregion int resource_index = 1; string targetlayername = "countries"; System.
10、Data.DataTable datatable = null; //直接获取MapResourceName为world的MapFunctionality,它的编号为1 ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality mf = (ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality)Map1.GetFunctionality(resource_index); //先得到functionality,再获取resource
11、 ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = mf.Resource; bool supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)); if (supported) { ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctio
12、nality qfunc; qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null); string[] lids; string[] lnames; qfunc.GetQueryableLayers(null,
13、out lids, out lnames); ESRI.ArcGIS.ADF.Web.SpatialFilter spatialfilter = new ESRI.ArcGIS.ADF.Web.SpatialFilter(); spatialfilter.ReturnADFGeometries = false; spatialfilter.MaxRecords = 1000; spatialfilter.WhereClause = "OBJECTID like " + t
14、xtQuery.Text; datatable = qfunc.Query(null, lids[0], spatialfilter); } //重新获得Map1控件所有的functionality IEnumerable gfc = Map1.GetFunctionalities(); ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = null; foreach
15、IGISFunctionality gfunc in gfc) { //找到名为"Selection"的MapResource if (gfunc.Resource.Name == "Selection") { //down cast到ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = (ESRI.ArcGIS.ADF.Web.D
16、ataSources.Graphics.MapResource)gfunc.Resource; } } if (gResource == null) return; ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer glayer = null; foreach (System.Data.DataTable dt in gResource.Graphics.Tables)
17、 { if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer) { glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt; break; } } if (glayer == null)
18、 { glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer(); gResource.Graphics.Tables.Add(glayer); } //清除已有数据 glayer.Clear(); DataRowCollection drs = datatable.Rows; int shpind = -1;
19、 for (int i = 0; i < datatable.Columns.Count; i++) { if (datatable.Columns[i].DataType == typeof(ESRI.ArcGIS.ADF.Web.Geometry.Geometry)) { //找到Geometry字段的序号 shpind = i; break; }
20、 } try { foreach (DataRow dr in drs) { ESRI.ArcGIS.ADF.Web.Geometry.Geometry geom = (ESRI.ArcGIS.ADF.Web.Geometry.Geometry)dr[shpind]; //创建一个GraphicElement ESRI.ArcGIS.ADF.Web.Dis
21、play.Graphics.GraphicElement ge = null; ge = new ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(geom, System.Drawing.Color.Yellow); ge.Symbol.Transparency = 50.0; //将GraphicElement添加到ElementGraphicsLayer中 glayer.Add(g
22、e); } } catch (InvalidCastException ice) { throw new Exception("No geometry available in datatable"); } if (Map1.ImageBlendingMode == ImageBlendingMode.WebTier) { Map1.Refresh(); } else if (Map1.ImageBlendingMode == ImageBlendingMode.Browser) { //只刷新Graphics Resource Map1.RefreshResource(gResource.Name); } }






