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
}
浙公网安备 33010602011771号