原文:
ArcGIS API for Silverlight动态标绘的实现
1、下载2个dll文件,分别是:
ArcGISPlotSilverlightAPI.dll 和 Matrix.dll
其下载地址为:http://download.csdn.net/detail/taomanman/9212163
2、在Silverlight项目中添加上面2个dll引用,如下图所示:
3、核心及调用代码如下所示:
<UserControl x:Class="SLPlotMap.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:layer="clr-namespace:MapClient.CommonClass" xmlns:esri="http://schemas.esri.com/arcgis/client/2009"> <Grid x:Name="LayoutRoot" Background="White"> <esri:Map Background="White" Name="myMap" WrapAround="True"> <esri:Map.Layers> <esri:LayerCollection> <esri:ArcGISTiledMapServiceLayer Url="http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" /> </esri:LayerCollection> </esri:Map.Layers> </esri:Map> <Grid> <Grid.RowDefinitions> <RowDefinition Height="40" /> </Grid.RowDefinitions> <StackPanel Orientation="Horizontal" Margin="2"> <Button Click="simpleArrow_Click"> 简单箭头 </Button> <Button Click="TailedArrow_Click"> 尾箭头 </Button> <Button Click="StraightArrow_Click"> 直箭头 </Button> <Button Click="CustomArrow_Click"> 自定义箭头 </Button> <Button Click="CustomTailedArrow_Click"> 自定义尾箭头 </Button> <Button Click="DoubleArrow_Click"> 双箭头 </Button> <Button Click="AssemblyArea_Click"> 装配区 </Button> <Button Click="CurveFlag_Click"> 曲线旗 </Button> <Button Click="RectFlag_Click"> 矩形旗 </Button> <Button Click="TriangleFlag_Click"> 三角旗 </Button> <Button Click="Circle_Click"> 圆 </Button> <Button Click="Finish_Click"> 结束 </Button> <Button Click="StartEdit_Click"> 开始编辑 </Button> <Button Click="StopEdit_Click"> 停止编辑 </Button> </StackPanel> </Grid> </Grid> </UserControl>
using System; using System.Collections.Generic; using System.Net; using System.Windows; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Animation; using System.Windows.Shapes; using ESRI.ArcGIS.Client; using ArcGISPlotSilverlightAPI; using Matrix.Xmpp.Client; using ESRI.ArcGIS.Client.Geometry; using ESRI.ArcGIS.Client.Symbols; using ESRI.ArcGIS.Client.Geometry; using ESRI.ArcGIS.Client.Symbols; using Matrix.Xmpp; using Matrix.Net; using MapClient.CommonClass; using System.Windows.Media.Imaging; using System.IO; using SLPlotMap.CommonClass; namespace SLPlotMap { public partial class MainPage : UserControl { private AssemblyArea _aArrow; private SimpleArrow _arraw; private CustomArrow _cArrow; private CurveFlag _cFlag; private Circle _circle; private CustomTailedArrow _ctArrow; private DoubleArrow _dArrow; private EditGeometry _editGeometry; private GraphicsLayer _gGraphicsLayer1; private bool _isEdit; private bool _isFinish; private PlotDraw _plotDraw; private long _pointCount; private RectFlag _rFlag; private StraightArrow _sArrow; private TailedArrow _tArraw; private TriangleFlag _tFlag; private XmppClient _xmppClient; private Graphic selectedPointGraphic; public MainPage() { InitializeComponent(); this.Init(); } private void _gGraphicsLayer_MouseLeftButtonDown(object sender, GraphicMouseButtonEventArgs e) { if (this._isEdit) { e.Handled = true; if (e.Graphic.Geometry is MapPoint) { e.Graphic.Selected = true; this.selectedPointGraphic = e.Graphic; } else { this._editGeometry.StartEdit(e.Graphic); } } } private void _plotDraw_DrawEnd(ESRI.ArcGIS.Client.Geometry.Polygon polygon) { SimpleFillSymbol symbol = new SimpleFillSymbol { Fill = new SolidColorBrush(Color.FromArgb(0x9b, 0xff, 0, 0)) }; Graphic item = new Graphic { Geometry = polygon, Symbol = symbol }; this._gGraphicsLayer1.Graphics.Add(item); Message el = new Message { To = "lei@192.168.200.117", Type = MessageType.chat, Body = polygon.ToString() }; this._xmppClient.Send(el); } private void _xmppClient_OnRosterEnd(object sender, EventArgs e) { } private void AssemblyArea_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.AssemblyArea); } private void Circle_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.Circle); } private void CloseSession() { this._xmppClient.SendUnavailablePresence("Gone home from the office"); this._xmppClient.Close(); } private void Connect() { this._xmppClient.SetUsername("zbc"); this._xmppClient.SetXmppDomain("192.168.200.117"); this._xmppClient.Password = "zbc"; this._xmppClient.OnRosterEnd += new EventHandler<Matrix.EventArgs>(this._xmppClient_OnRosterEnd); this._xmppClient.Port = 0x1466; this._xmppClient.Transport = Transport.BOSH; this._xmppClient.Uri = new Uri("http://192.168.200.117:8080/http-bind/"); } private void CurveFlag_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.CurveFlag); } private void CustomArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.CustomArrow); } private void CustomTailedArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.CustomTailedArrow); } private void DoubleArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.DoubleArrow); } private void Finish_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.None); } public void Init() { this._pointCount = 0L; this._gGraphicsLayer1 = new GraphicsLayer(); this._isFinish = true; this._xmppClient = new XmppClient(); this.Connect(); this._plotDraw = new PlotDraw(this.myMap); this._plotDraw.DrawEnd += new PlotDraw.DrawEndEventHandler(this._plotDraw_DrawEnd); EditGeometry geometry = new EditGeometry { Map = this.myMap, IsEnabled = true, EditVerticesEnabled = false }; this._editGeometry = geometry; this.myMap.Layers.Add(this._gGraphicsLayer1); this._gGraphicsLayer1.MouseLeftButtonDown += new GraphicsLayer.MouseButtonEventHandler(this._gGraphicsLayer_MouseLeftButtonDown); this._isEdit = false; } private void RectFlag_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.RectFlag); } private void simpleArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.SimpleArrow); } private void StartEdit_Click(object sender, RoutedEventArgs e) { this._isEdit = true; this._plotDraw.setPlotDrawMode(PlotDrawMode.None); } private void StopEdit_Click(object sender, RoutedEventArgs e) { this._isEdit = false; } private void StraightArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.StraightArrow); } private void TailedArrow_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.TailedArrow); } private void TriangleFlag_Click(object sender, RoutedEventArgs e) { this._plotDraw.setPlotDrawMode(PlotDrawMode.TriangleFlag); } } }
===========================================================================
如果觉得对您有帮助,微信扫一扫支持一下: