zoukankan      html  css  js  c++  java
  • ArcGIS.Server.9.2.DotNet自带例子分析(三、一)

    目的:
    1.arcgis server9.2 ADF的AddGraphics

    准备工作:
    1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Service,并且把这个Service启动起来。
    2.找到DeveloperKit\SamplesNET\Server\Web_Applications目录下的Common_AddGraphicsCSharp.zip。

    开始: 
    1.新建名为AddGraphics的ASP.NET Web应用程序。
    2.在页面上放置1个Map、1个Toc、1个MapResourceManager、1个Toolbar控件,做好相应的设置比较简单也不详细说了,也可以参考前面的几篇文章。
    3.主要说一下MapResourceManager1设置了,这次与前几篇不同了用的是ArcGIS Server Internet,用编辑器添加以一个名为ServerResource的MapResourceItem,然后点击Definition属性做如下设置,Type:ArcGIS Server Internet;Data Source:http://机器名/arcgis/services;Identity:输入机器的账号和密码;Resource:(default)@world。
    4.在Toolbar1添加一个Tool,Name:AddPointTool;Text:Add Graphic Point;ClientAction:Point;ServerActionAssembly:AddGraphics;ServerActionClass:AddGraphics.ElementGraphicTool。
    5.新建GraphicPointTools.cs文件,然后在文件中添加ElementGraphicTool类用来实现AddPointTool的功能,代码和说明如下:

     1public class ElementGraphicTool : IMapServerToolAction
     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            //转成点
     8            PointEventArgs pointEventArgs = (PointEventArgs)toolEventArgs;
     9            //屏幕点
    10            System.Drawing.Point screenPoint = pointEventArgs.ScreenPoint;
    11
    12            //屏幕坐标转成地理坐标
    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                //当Resource为ADFGraphicsResource,ADFGraphicsResource为GraphicsLayer, 保存在内存中用显示临时图层
    20                if (mapFunctionality.Resource.Name == "ADFGraphicsResource")
    21                {
    22                    adfGraphicsMapFunctionality =(ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)mapFunctionality;
    23                    break;
    24                }

    25            }

    26
    27            //当为null的时候调用Utility.ProcessError方法弹出提示框
    28            if (adfGraphicsMapFunctionality == null)
    29            {
    30                //把Utility.ProcessError处理的CallbackResultCollection结果赋给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结果赋给Map控件
    58                adfMap.CallbackResults.CopyFrom(adfToc.CallbackResults);
    59            }

    60
    61            //定义标点样式
    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            //定义标点选中样式
    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            //把标点添加到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执行js脚本
    11            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult alertCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(nullnull"javascript", jsAlertException);
    12
    13            //设置鼠标的指针显示
    14            string jsChangeCursor = "map.divObject.style.cursor = map.cursor";
    15            //用CallbackResult执行js脚本
    16            ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult cursorCallbackResult =new ESRI.ArcGIS.ADF.Web.UI.WebControls.CallbackResult(nullnull"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的功能可以运行查看一下效果。 这个例子剩下的部分下篇继续写。
  • 相关阅读:
    数据库(DB)
    PHP课程设计
    版本号设计规则
    设计模式(Java)
    简单的流式布局(移动应用开发)
    laravel工作机制(PHP程序设计)
    接口自动化测试(软件测试)
    Java学习路线
    ES6基础知识
    promise
  • 原文地址:https://www.cnblogs.com/hll2008/p/1270836.html
Copyright © 2011-2022 走看看