arcgis server 添加一个Grphic点例子

arcgis server 添加一个Grphic点例子

(参考代码位置在ESRI帮助ArcGIS_AddGraphics_CSharp\App_Code\PointTool.cs

1.       开发环境,arcGIS server 9.2 sp4,VS2005

2.       通过ESRI提供的开发模板建立一个框架。

3.       进入代码,在App_Code右键,建立一个类,名称为:clsDrawPoint.cs

4.       点击Default.aspx,进入源模式“,拷贝如下代码:

  <esri:Tool ClientAction="Point" DefaultImage="~/images/point.gif" DisabledImage="~/images/pointD.gif" HoverImage="~/images/pointU.gif" JavaScriptFile="Point" Name="ToolDrawPoint" SelectedImage="~/images/fixedzoominD.gif" ServerActionAssembly="App_Code" ServerActionClass="clsDrawPoint"  Text="画点" ToolTip="画一个点在地图上" /> <ToolbarItems>节点中。

5.双击clsDrawPoint.cs,添加如下代码public class clsDrawPoint:ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction ,及让类继承于IMapServerToolAction,取得鼠标点击事件。

添加如下代码:

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using ESRI.ArcGIS.Display;

using stdole;

using ESRI.ArcGIS.Carto;

using ESRI.ArcGIS.Geometry;

 

/// <summary>

/// 绘制一个点在地图上

/// </summary>

public class clsDrawPoint:ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction 

{

     public clsDrawPoint()

     {

 

         //

         // TODO: 在此处添加构造函数逻辑

         //

     }

 

    #region IMapServerToolAction 成员

    /// <summary>

    /// 响应地图上鼠MOUSEDOWN事件,据我所知,应该是MouseUp事件,但是。。。

    /// </summary>

    /// <param name="args">从地图上来的参数,强制转换为一个点事件</param>

    public void ServerAction(ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs args)

    {

 

        //取得Map

        ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;

 

        //强制转换为点事件,这样可以取得事件的点屏幕坐标

        ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs pPontEventArgs = (ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs)args;

        System.Drawing.Point screenPoint = pPontEventArgs.ScreenPoint;

        ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint, adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));

        ESRI.ArcGIS.ADF.ArcGISServer.PointN agsSoapPoint = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adfPoint);

        //取得功能集合

        ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality agsMF = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)adfMap.GetFunctionality(0);

        ESRI.ArcGIS.ADF.ArcGISServer.MapDescription agsSoapMapDesc = agsMF.MapDescription;

       

        //设置鼠标点

        agsSoapPoint.IDSpecified = false;

        agsSoapPoint.MSpecified = false;

        agsSoapPoint.ZSpecified = false;

        agsSoapPoint.SpatialReference = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfSpatialReference(adfMap.SpatialReference);

       

        //设置颜色

        ESRI.ArcGIS.ADF.ArcGISServer.RgbColor agsSoapRgbcolor = new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();

        agsSoapRgbcolor.Red = 255;

        agsSoapRgbcolor.Green = 0;

        agsSoapRgbcolor.Blue = 0;

        agsSoapRgbcolor.AlphaValue = 255;

 

        //点符号的颜色,样式和大小

        ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol agsSoapSimpleMarkerSymbol = new ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol();

        agsSoapSimpleMarkerSymbol.Style = ESRI.ArcGIS.ADF.ArcGISServer.esriSimpleMarkerStyle.esriSMSCross ;

        agsSoapSimpleMarkerSymbol.Color = agsSoapRgbcolor;

        agsSoapSimpleMarkerSymbol.Size = 5;

 

        //设置Element的符号和位置

        ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement agsSoapMarkerEle = new ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement();

        agsSoapMarkerEle.Symbol = agsSoapSimpleMarkerSymbol;

        agsSoapMarkerEle.Point = agsSoapPoint;

 

        //添加到Graphic

        if (agsSoapMapDesc.CustomGraphics != null)

        {

            ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicsEleArrayOld = agsSoapMapDesc.CustomGraphics;

            int dElementCount = agsSoapGraphicsEleArrayOld.Length;

            ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicsEleArrayNew = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[dElementCount + 1];

            agsSoapGraphicsEleArrayOld.CopyTo(agsSoapGraphicsEleArrayNew, 0);

            agsSoapGraphicsEleArrayNew[dElementCount] = agsSoapMarkerEle;

            agsSoapMapDesc.CustomGraphics = agsSoapGraphicsEleArrayNew;

        }

        else

        {

            ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicEle = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[1];

            agsSoapGraphicEle[0] = agsSoapMarkerEle;

            agsSoapMapDesc.CustomGraphics = agsSoapGraphicEle;

        }

 

        //刷新地图

        if (adfMap.ImageBlendingMode == ESRI.ArcGIS.ADF.Web.UI.WebControls.ImageBlendingMode.Browser)

        {

            adfMap.RefreshResource(agsMF.Resource.Name);

        }

        else

        {

            adfMap.Refresh();

        }

  

    }

    #endregion

}

 

发布后图片为:

posted on 2008-02-14 09:38  【轻骑兵】  阅读(1655)  评论(7)    收藏  举报

导航