ArcGIS.Server.9.2.DotNet自带例子分析(三、一)
目的:
1.arcgis server9.2 ADF的AddGraphics。
準(zhǔn)備工作:
1.用ArcGis Server Manager或者ArcCatalog發(fā)布一個叫world的Map Service,并且把這個Service啟動起來。
2.找到DeveloperKit\SamplesNET\Server\Web_Applications目錄下的Common_AddGraphicsCSharp.zip。
開始:?
1.新建名為AddGraphics的ASP.NET Web應(yīng)用程序。
2.在頁面上放置1個Map、1個Toc、1個MapResourceManager、1個Toolbar控件,做好相應(yīng)的設(shè)置比較簡單也不詳細(xì)說了,也可以參考前面的幾篇文章。
3.主要說一下MapResourceManager1設(shè)置了,這次與前幾篇不同了用的是ArcGIS Server Internet,用編輯器添加以一個名為ServerResource的MapResourceItem,然后點擊Definition屬性做如下設(shè)置,Type:ArcGIS Server Internet;Data Source:http://機(jī)器名/arcgis/services;Identity:輸入機(jī)器的賬號和密碼;Resource:(default)@world。
4.在Toolbar1添加一個Tool,Name:AddPointTool;Text:Add Graphic Point;ClientAction:Point;ServerActionAssembly:AddGraphics;ServerActionClass:AddGraphics.ElementGraphicTool。
5.新建GraphicPointTools.cs文件,然后在文件中添加ElementGraphicTool類用來實現(xiàn)AddPointTool的功能,代碼和說明如下:
?2????{
?3????????void?IMapServerToolAction.ServerAction(ToolEventArgs?toolEventArgs)
?4????????{
?5????????????//獲取map控件
?6????????????ESRI.ArcGIS.ADF.Web.UI.WebControls.Map?adfMap?=(ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)toolEventArgs.Control;
?7????????????//轉(zhuǎn)成點
?8????????????PointEventArgs?pointEventArgs?=?(PointEventArgs)toolEventArgs;
?9????????????//屏幕點
10????????????System.Drawing.Point?screenPoint?=?pointEventArgs.ScreenPoint;
11
12????????????//屏幕坐標(biāo)轉(zhuǎn)成地理坐標(biāo)
13????????????ESRI.ArcGIS.ADF.Web.Geometry.Point?adfPoint?=ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint.X,?screenPoint.Y,?adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));
14??????????
15????????????ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality?adfGraphicsMapFunctionality?=?null;
16????????????//MapFunctionality
17????????????foreach?(ESRI.ArcGIS.ADF.Web.DataSources.IMapFunctionality?mapFunctionality?in?adfMap.GetFunctionalities())
18????????????{
19????????????????//當(dāng)Resource為ADFGraphicsResource,ADFGraphicsResource為GraphicsLayer,?保存在內(nèi)存中用顯示臨時圖層
20????????????????if?(mapFunctionality.Resource.Name?==?"ADFGraphicsResource")
21????????????????{
22????????????????????adfGraphicsMapFunctionality?=(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
23????????????????????break;
24????????????????}
25????????????}
26
27????????????//當(dāng)為null的時候調(diào)用Utility.ProcessError方法彈出提示框
28????????????if?(adfGraphicsMapFunctionality?==?null)
29????????????{
30????????????????//把Utility.ProcessError處理的CallbackResultCollection結(jié)果賦給Map控件
31????????????????adfMap.CallbackResults.CopyFrom(Utility.ProcessError("ADF?graphics?functionality?not?found"));
32????????????????return;
33????????????}
34
35????????????//從adfGraphicsMapFunctionality獲取名為Element?Graphics的DataTable
36????????????ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer?elementGraphicsLayer?=?null;
37????????????foreach?(System.Data.DataTable?dataTable?in?adfGraphicsMapFunctionality.GraphicsDataSet.Tables)
38????????????{
39????????????????if?(dataTable.TableName?==?"Element?Graphics")
40????????????????{
41????????????????????elementGraphicsLayer?=?(ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer)dataTable;
42????????????????????break;
43????????????????}
44????????????}
45
46????????????//如果名為Element?Graphics的DataTable為null,就新建Element?Graphics?DataTable添加到adfGraphicsMapFunctionality.GraphicsDataSet中,同時刷新Toc1顯示
47????????????if?(elementGraphicsLayer?==?null)
48????????????{
49????????????????elementGraphicsLayer?=?new?ESRI.ArcGIS.ADF.Web.Display.Graphics.ElementGraphicsLayer();
50????????????????elementGraphicsLayer.TableName?=?"Element?Graphics";
51????????????????adfGraphicsMapFunctionality.GraphicsDataSet.Tables.Add(elementGraphicsLayer);
52
53????????????????//查找Toc1控件
54????????????????Toc?adfToc?=?(Toc)Utility.FindControl("Toc1",?adfMap.Page);
55????????????????//刷新Toc1控件
56????????????????adfToc.Refresh();
57????????????????//CallbackResults結(jié)果賦給Map控件
58????????????????adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);
59????????????}
60
61????????????//定義標(biāo)點樣式
62????????????ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol?simpleMarkerSymbol?=new?ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
63????????????simpleMarkerSymbol.Color?=?System.Drawing.Color.Black;
64????????????simpleMarkerSymbol.Width?=?10;
65
66????????????//定義標(biāo)點選中樣式
67????????????ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol?simpleSelectedMarkerSymbol?=new?ESRI.ArcGIS.ADF.Web.Display.Symbol.SimpleMarkerSymbol();
68????????????simpleSelectedMarkerSymbol.Color?=?System.Drawing.Color.Yellow;
69????????????simpleSelectedMarkerSymbol.Width?=?12;
70????????????simpleSelectedMarkerSymbol.Type?=?ESRI.ArcGIS.ADF.Web.Display.Symbol.MarkerSymbolType.Star;
71
72????????????ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement?graphicElement?=new?ESRI.ArcGIS.ADF.Web.Display.Graphics.GraphicElement(adfPoint,?simpleMarkerSymbol,?simpleSelectedMarkerSymbol);
73????????????//把標(biāo)點添加到elementGraphicsLayer
74????????????elementGraphicsLayer.Add(graphicElement);
75????????????//刷新顯示
76????????????if?(adfMap.ImageBlendingMode?==?ImageBlendingMode.WebTier)
77????????????{?
78????????????????//整個地圖控件刷新
79????????????????adfMap.Refresh();?
80????????????}
81????????????else
82????????????{
83????????????????//只刷新部分Resource
84????????????????adfMap.RefreshResource(adfGraphicsMapFunctionality.Resource.Name);?
85????????????}
86????????}
87????} 6.新建Utility.cs文件,然后添加上面的ElementGraphicTool類中用到的ProcessError和FindControl方法,具體代碼和說明如下:
?1namespace?AddGraphics
?2{
?3????public?class?Utility
?4????{
?5????????//錯誤信息處理
?6????????public?static?ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection?ProcessError(string?message)
?7????????{
?8????????????//alert錯誤信息
?9????????????string?jsAlertException?=?"alert('"?+?message?+?"')";
10????????????//用CallbackResult執(zhí)行js腳本
11????????????ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult?alertCallbackResult?=new?ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null,?null,?"javascript",?jsAlertException);
12
13????????????//設(shè)置鼠標(biāo)的指針顯示
14????????????string?jsChangeCursor?=?"map.divObject.style.cursor?=?map.cursor";
15????????????//用CallbackResult執(zhí)行js腳本
16????????????ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult?cursorCallbackResult?=new?ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(null,?null,?"javascript",?jsChangeCursor);
17
18????????????ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection?callbackResultCollection?=new?ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResultCollection();
19????????????callbackResultCollection.Add(alertCallbackResult);
20????????????callbackResultCollection.Add(cursorCallbackResult);
21
22????????????//返回CallbackResultCollection
23????????????return?callbackResultCollection;
24????????}
25
26????????//查找頁面控件
27????????public?static?Control?FindControl(string?control,?Page?page)
28????????{
29????????????if?(page?==?null?||?control?==?null)
30????????????{
31????????????????return?null;
32????????????}?
33????????????Control?buddyControl?=?page.FindControl(control);
34????????????if?(buddyControl?==?null)
35????????????{
36????????????????string?webPartControl?=?GetControlUniqueID(control,?page.Controls);
37????????????????if?(webPartControl?!=?null)
38????????????????{
39????????????????????buddyControl?=?page.FindControl(webPartControl);
40????????????????}
41????????????????else
42????????????????{
43????????????????????buddyControl?=?page.FindControl(control);
44????????????????}
45????????????????????
46????????????}
47????????????return?buddyControl;
48????????}
49
50????????public?static?string?GetControlUniqueID(string?controlID,?ControlCollection?controls)
51????????{
52????????????Control?control;
53????????????string?uniqueID?=?null;
54????????????for?(int?i?=?0;?i?<?controls.Count;?++i)
55????????????{
56????????????????control?=?controls[i];
57????????????????if?(control.ID?==?controlID)
58????????????????{
59????????????????????uniqueID?=?control.UniqueID;
60????????????????????break;
61????????????????}
62????????????????if?(control.Controls.Count?>?0)
63????????????????{
64????????????????????uniqueID?=?GetControlUniqueID(controlID,?control.Controls);
65????????????????????if?(uniqueID?!=?null)
66????????????????????????break;
67????????????????}
68????????????}
69????????????return?uniqueID;
70????????}
71
72????}
73}
74 7.這樣就完成了AddGraphics的功能可以運(yùn)行查看一下效果。 這個例子剩下的部分下篇繼續(xù)寫。
轉(zhuǎn)載于:https://www.cnblogs.com/hll2008/archive/2008/08/19/1270836.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的ArcGIS.Server.9.2.DotNet自带例子分析(三、一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数声明指令(stdcall, cdec
- 下一篇: 新增一自增列