资源描述
选中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;
//获取当前map1控件中所有的functionality
func_enum = Map1.GetFunctionalities();
System.Data.DataTable datatable;
//对所有的functionality进行遍历
foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisfunctionality in func_enum)
{
ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisresource = null;
//得到该functionality的resource
gisresource = gisfunctionality.Resource;
//判断该resource是否支持IQueryFunctionality
bool supported = false;
supported = gisresource.SupportsFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));
if (supported)
{
ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality qfunc;
qfunc = (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)gisresource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);
string[] lids;
string[] lnames;
//获得图层的layerId和layerName,GetQueryableLayers的重载方法可以指定图层类型
qfunc.GetQueryableLayers(null, out lids, 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;
spatialfilter.WhereClause = txtQuery.Text;
spatialfilter.Geometry = geometry;
//对指定的图层进行查询,查询的结果保存为DataTable
datatable = qfunc.Query(null, lids[0], spatialfilter);
TreeViewPlus1.Nodes.Clear();
if (datatable != null)
{
System.Data.DataSet ds = new System.Data.DataSet();
ds.Tables.Add(datatable);
TreeViewPlus1.ShowClearAllButton = false;
//将结果绑定到TreeViewPlus控件上
TreeViewPlus1.BindToDataSet(ds);
TreeViewPlus1.Nodes[0].Expanded = true;
}
}
}
*/
#endregion
int resource_index = 1;
string targetlayername = "countries";
System.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
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.IQueryFunctionality 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, 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 " + txtQuery.Text;
datatable = qfunc.Query(null, lids[0], spatialfilter);
}
//重新获得Map1控件所有的functionality
IEnumerable gfc = Map1.GetFunctionalities();
ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapResource gResource = null;
foreach (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.DataSources.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)
{
if (dt is ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)
{
glayer = (ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dt;
break;
}
}
if (glayer == null)
{
glayer = new ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
gResource.Graphics.Tables.Add(glayer);
}
//清除已有数据
glayer.Clear();
DataRowCollection drs = datatable.Rows;
int shpind = -1;
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;
}
}
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.Display.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(ge);
}
}
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);
}
}
展开阅读全文