ArcGIS API for Silverlight动态标绘的实现

时间:2022-09-22 10:11:26

原文:ArcGIS API for Silverlight动态标绘的实现

ArcGIS API for Silverlight动态标绘的实现

1、下载2个dll文件,分别是:

ArcGISPlotSilverlightAPI.dll 和 Matrix.dll

其下载地址为:http://download.csdn.net/detail/taomanman/9212163

2、在Silverlight项目中添加上面2个dll引用,如下图所示:

ArcGIS API for Silverlight动态标绘的实现

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);
}
}
}

===========================================================================

如果觉得对您有帮助,微信扫一扫支持一下:

ArcGIS API for Silverlight动态标绘的实现