ArcGIS Server之高亮查詢要素
GIS中,一般查詢要素後,為提醒使用者注意,都會在地圖上用不同的顏色將要素高亮顯示,或者以閃爍實現。
ArcGIS Server中,實現高亮查詢要素有兩種思路。一是在Manager中新建一個GraphicLayer層,這個層是在內層中的,然後在這個層上將需要高亮顯示的要素重新畫一遍。另一種思路是設定資源繪圖功能的MapDescription屬性的CustomGraphic屬性。考慮到方法的難易程度,以及通用性,個人感覺用第一種方法更佳。第二種方法參見下面這篇博文:http://www.cnblogs.com/tuncaysanli/archive/2009/06/21/1507738.html
第一種方法的思路如下:
1.獲得Manager裡的GraphicResource,並在Resource裡獲取GraphicsLayer。
這個步驟有兩個問題需要明確。一,GraphicResource是一種Resource,裡面自然可以存1-n個Layer,而每一個Layer又是一個DataTable,兩者之間是可以相互轉換的。二,ArcGIS Server裡的GraphicsLayer有2種,分別是ElementGraphicsLayer和FeatureGraphicsLayer。兩種Layer最大的區別在於:ElementGraphicsLayer中可以儲存不同型別的Geometry,類似於以前MO或者SO中的動態層,而且它不帶屬性資訊;FeatureGraphicsLayer則相反,每一層只能儲存同一幾何型別的Geometry,且可以帶屬性資訊。
2.獲得查詢要素的資訊,並轉化為Element,新增到ElementLayer中
GraphicElement element = new GraphicElement(geom, System.Drawing.Color.Yellow, System.Drawing.Color.Red);
從上面的程式碼我們可以發現,ESRI為GraphicElement提供了很多的建構函式,可以方便的新建GraphicElement。比如提供Element的顏色,選擇的顏色,高亮的顏色,透明度等等,或者設定預設的style和選擇狀況下的style。
3.重新整理地圖,其中resourceName為GraphicResource的Name。
public static void RefreshMap(Map map, string resourceName)
{
if (map.ImageBlendingMode == ImageBlendingMode.WebTier)
{
map.Refresh();
}
else if (map.ImageBlendingMode == ImageBlendingMode.Browser)
{
map.RefreshResource(resourceName);
}
}