|
阅读:979回复:0
arcgis server 添加一个Grphic点例子
<P align=center>(参考代码位置在ESRI帮助ArcGIS_AddGraphics_CSharp\App_Code\PointTool.cs)</P>
<P >1. 开发环境,arcGIS server 9.2 sp4,VS2005</P> <P >2. 通过ESRI提供的开发模板建立一个框架。</P> <P >3. 进入代码,在App_Code右键,建立一个类,名称为:clsDrawPoint.cs</P> <P >4. 点击Default.aspx,进入“源模式“,拷贝如下代码:</P> <P> <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>节点中。</P> <P>5.双击clsDrawPoint.cs,添加如下代码public class clsDrawPoint:ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction ,及让类继承于IMapServerToolAction,取得鼠标点击事件。</P> <P>添加如下代码:</P> <P align=left>using System;</P> <P align=left>using System.Data;</P> <P align=left>using System.Configuration;</P> <P align=left>using System.Web;</P> <P align=left>using System.Web.Security;</P> <P align=left>using System.Web.UI;</P> <P align=left>using System.Web.UI.WebControls;</P> <P align=left>using System.Web.UI.WebControls.WebParts;</P> <P align=left>using System.Web.UI.HtmlControls;</P> <P align=left>using ESRI.ArcGIS.Display;</P> <P align=left>using stdole;</P> <P align=left>using ESRI.ArcGIS.Carto;</P> <P align=left>using ESRI.ArcGIS.Geometry;</P> <P align=left> </P> <P align=left>/// <summary></P> <P align=left>/// 绘制一个点在地图上</P> <P align=left>/// </summary></P> <P align=left>public class clsDrawPoint:ESRI.ArcGIS.ADF.Web.UI.WebControls.Tools.IMapServerToolAction </P> <P align=left>{</P> <P align=left> public clsDrawPoint()</P> <P align=left> {</P> <P align=left> </P> <P align=left> //</P> <P align=left> // TOD 在此处添加构造函数逻辑</P> <P align=left> //</P> <P align=left> }</P> <P align=left> </P> <P align=left> #region IMapServerToolAction 成员</P> <P align=left> /// <summary></P> <P align=left> /// 响应地图上鼠MOUSEDOWN事件,据我所知,应该是MouseUp事件,但是。。。</P> <P align=left> /// </summary></P> <P align=left> /// <param name="args">从地图上来的参数,强制转换为一个点事件</param></P> <P align=left> public void ServerAction(ESRI.ArcGIS.ADF.Web.UI.WebControls.ToolEventArgs args)</P> <P align=left> {</P> <P align=left> </P> <P align=left> //取得Map</P> <P align=left> ESRI.ArcGIS.ADF.Web.UI.WebControls.Map adfMap = (ESRI.ArcGIS.ADF.Web.UI.WebControls.Map)args.Control;</P> <P align=left> </P> <P align=left> //强制转换为点事件,这样可以取得事件的点屏幕坐标</P> <P align=left> ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs pPontEventArgs = (ESRI.ArcGIS.ADF.Web.UI.WebControls.PointEventArgs)args;</P> <P align=left> System.Drawing.Point screenPoint = pPontEventArgs.ScreenPoint;</P> <P align=left> ESRI.ArcGIS.ADF.Web.Geometry.Point adfPoint = ESRI.ArcGIS.ADF.Web.Geometry.Point.ToMapPoint(screenPoint, adfMap.GetTransformationParams(ESRI.ArcGIS.ADF.Web.Geometry.TransformationDirection.ToMap));</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.PointN agsSoapPoint = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfPoint(adfPoint);</P> <P align=left> //取得功能集合</P> <P align=left> ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality agsMF = (ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.MapFunctionality)adfMap.GetFunctionality(0);</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.MapDescription agsSoapMapDesc = agsMF.MapDescription;</P> <P align=left> </P> <P align=left> //设置鼠标点</P> <P align=left> agsSoapPoint.IDSpecified = false;</P> <P align=left> agsSoapPoint.MSpecified = false;</P> <P align=left> agsSoapPoint.ZSpecified = false;</P> <P align=left> agsSoapPoint.SpatialReference = ESRI.ArcGIS.ADF.Web.DataSources.ArcGISServer.Converter.FromAdfSpatialReference(adfMap.SpatialReference);</P> <P align=left> </P> <P align=left> //设置颜色</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.RgbColor agsSoapRgbcolor = new ESRI.ArcGIS.ADF.ArcGISServer.RgbColor();</P> <P align=left> agsSoapRgbcolor.Red = 255;</P> <P align=left> agsSoapRgbcolor.Green = 0;</P> <P align=left> agsSoapRgbcolor.Blue = 0;</P> <P align=left> agsSoapRgbcolor.AlphaValue = 255;</P> <P align=left> </P> <P align=left> //点符号的颜色,样式和大小</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol agsSoapSimpleMarkerSymbol = new ESRI.ArcGIS.ADF.ArcGISServer.SimpleMarkerSymbol();</P> <P align=left> agsSoapSimpleMarkerSymbol.Style = ESRI.ArcGIS.ADF.ArcGISServer.esriSimpleMarkerStyle.esriSMSCross ;</P> <P align=left> agsSoapSimpleMarkerSymbol.Color = agsSoapRgbcolor;</P> <P align=left> agsSoapSimpleMarkerSymbol.Size = 5;</P> <P align=left> </P> <P align=left> //设置Element的符号和位置</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement agsSoapMarkerEle = new ESRI.ArcGIS.ADF.ArcGISServer.MarkerElement();</P> <P align=left> agsSoapMarkerEle.Symbol = agsSoapSimpleMarkerSymbol;</P> <P align=left> agsSoapMarkerEle.Point = agsSoapPoint;</P> <P align=left> </P> <P align=left> //添加到Graphic中</P> <P align=left> if (agsSoapMapDesc.CustomGraphics != null)</P> <P align=left> {</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicsEleArrayOld = agsSoapMapDesc.CustomGraphics;</P> <P align=left> int dElementCount = agsSoapGraphicsEleArrayOld.Length;</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicsEleArrayNew = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[dElementCount + 1];</P> <P align=left> agsSoapGraphicsEleArrayOld.CopyTo(agsSoapGraphicsEleArrayNew, 0);</P> <P align=left> agsSoapGraphicsEleArrayNew[dElementCount] = agsSoapMarkerEle;</P> <P align=left> agsSoapMapDesc.CustomGraphics = agsSoapGraphicsEleArrayNew;</P> <P align=left> }</P> <P align=left> else</P> <P align=left> {</P> <P align=left> ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[] agsSoapGraphicEle = new ESRI.ArcGIS.ADF.ArcGISServer.GraphicElement[1];</P> <P align=left> agsSoapGraphicEle[0] = agsSoapMarkerEle;</P> <P align=left> agsSoapMapDesc.CustomGraphics = agsSoapGraphicEle;</P> <P align=left> }</P> <P align=left> </P> <P align=left> //刷新地图</P> <P align=left> if (adfMap.ImageBlendingMode == ESRI.ArcGIS.ADF.Web.UI.WebControls.ImageBlendingMode.Browser)</P> <P align=left> {</P> <P align=left> adfMap.RefreshResource(agsMF.Resource.Name);</P> <P align=left> }</P> <P align=left> else</P> <P align=left> {</P> <P align=left> adfMap.Refresh();</P> <P align=left> }</P> <P align=left> </P> <P align=left> }</P> <P align=left> #endregion</P> <P>}</P> <P>发布后图片为:<BR><a href="http://groups.google.com/group/arc_gis/web/arcGIS%20Server%5Darcgis%20server%20%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AAGrphic%E7%82%B9%E4%BE%8B%E5%AD%90.JPG?hl=zh-CN" target="_blank" ><IMG src="http://groups.google.com/group/arc_gis/web/arcGIS%20Server%5Darcgis%20server%20%E6%B7%BB%E5%8A%A0%E4%B8%80%E4%B8%AAGrphic%E7%82%B9%E4%BE%8B%E5%AD%90.JPG?hl=zh-CN;display=thumb;width=420;height=420"></A></P> |
|
|