摘要:和ArcGIS Server Local、ArcGIS Server Internet一样,GraphicsLayer是ArcGIS Server MapResource的一种,提供functionality给web controls使用。本文将在《ArcGIS Server 开发系列(二)--Web ADF 编程》示例基础上,增加查询结果高亮显示的功能,因为高亮显示的结果并不是图层本身所具备的,因此只需将高亮显示的图片存为graphics即可。
和ArcGIS Server Local、ArcGIS Server Internet一样,GraphicsLayer是ArcGIS Server MapResource的一种,提供functionality给web controls使用。本文将在《ArcGIS Server 开发系列(二)--Web ADF 编程》示例基础上,增加查询结果高亮显示的功能,因为高亮显示的结果并不是图层本身所具备的,因此只需将高亮显示的图片存为graphics即可。目标:
查询结果的高亮显示
准备工作:
1.以《ArcGIS Server 开发系列(二)--Web ADF 编程》示例配置和代码为基础。
2.MapResourceManager属性中增加一个名为Selection的MapResource,并将它移动到编号为0的位置,即显示在所有MapResource最上面。
![](/Article/UploadFiles/200901/20090113102819445.gif)
可以看到GraphicsLayer的datasource是在内存中的,也就是说是为了临时显示或存储使用的,这样速度比较快。Selection一定要放在World上面,否则就被World图层覆盖掉了。 代码实现:
在UI界面上,增加一个command,用来清除graphics。
![](/Article/UploadFiles/200901/20090113102819872.gif)
双击“Select”生成事件响应方法:
![](/Article/UploadFiles/200901/20090113102819337.gif)
void cmdSelect_Click(object sender, EventArgs e)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
代码的核心就在SelectFeature()里,它分为两个步骤,第一步对图层进行属性查询,第二步对查询结果进行高亮显示。首先是图层的属性查询:
![](/Article/UploadFiles/200901/20090113102819337.gif)
1;
![](/Article/UploadFiles/200901/20090113102819337.gif)
"countries";
![](/Article/UploadFiles/200901/20090113102819337.gif)
null;
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
new ESRI.ArcGIS.ADF.Web.SpatialFilter();
![](/Article/UploadFiles/200901/20090113102819999.gif)
false;
![](/Article/UploadFiles/200901/20090113102819999.gif)
1000;
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
这段代码和《ArcGIS Server 开发系列(二)--Web ADF 编程》示例中的代码相比,没有太多改动的地方,用到了ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality,它继承于ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality 接口。每一个web control可能拥有多个functionality,而funtionality是各种resource展现出来的,因此可以通过web controls--funcionalities--resources这条路线来获得当前的资源,那么如何让查询结果高亮显示呢?
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
if (gfunc.Resource.Name =="Selection")
![](/Article/UploadFiles/200901/20090113102819148.gif)
![](/Article/UploadFiles/200901/20090113102820724.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102820559.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819148.gif)
![](/Article/UploadFiles/200901/20090113102820724.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102820559.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819148.gif)
![](/Article/UploadFiles/200901/20090113102820724.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102820559.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819148.gif)
![](/Article/UploadFiles/200901/20090113102820724.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102820559.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
new Exception("No geometry available in datatable");
![](/Article/UploadFiles/200901/20090113102819390.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819337.gif)
if (Map1.ImageBlendingMode == ImageBlendingMode.Browser)
![](/Article/UploadFiles/200901/20090113102819466.gif)
![](/Article/UploadFiles/200901/20090113102819355.gif)
![](/Article/UploadFiles/200901/20090113102819252.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819999.gif)
![](/Article/UploadFiles/200901/20090113102819390.gif)
这次我们没有将搜索到的结果绑定到控件上,只要得到高亮显示的结果,测试一下程序,看看能得到什么样的效果。
![](/Article/UploadFiles/200901/20090113102820379.gif)
搜索出国家名称以"C"开头的国家,最典型的“中国”、“加拿大”已经找到了,这样我们就实现了高亮显示的功能。同样,我们进行开发后的小结,能想到些什么呢?还是按照CH风格来进行总结:
第一,GraphicsLayer有两个子类,ElementGraphicLayer和FeatureGraphicLayer,因为程序中只需要暂时显示查询的结果,因此将查询要素存为ElementGraphicLayer就可以,想想在什么情况下使用FeatureGraphicLayer。
第二,ElementGraphicLayer继承于System.Data.DataTable,gResource.graphics属于 System.Data.DataSet类型,这样使得我们在开发过程中,可以将GraphicElement添加到 ElementGraphicLayer,然后将ElementGraphicLayer添加到gResource.graphics,通过这种途径来向 GraphicsLayer的mapresource中添加数据,这种机制方便了我们能够像操纵datatable和dataset一样来控制 mapresource中的数据,既和.Net无缝整合,也在一定程度上降低了Server开发难度,例如代码中glayer.Clear()调用了datatable的clear()方法,还有后面GraphicElement的创建。
第三,Map1.ImageBlendingMode决定了地图的刷新是刷新整个页面,还是仅刷新当前mapresource,这样的设计在web开发中尽可能的较少了网络数据传输量。