ArcGIS API for Silverlight动态标绘的实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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引用,如下图所示:

技术分享


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 = "[email protected]",
                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动态标绘的实现的主要内容,如果未能解决你的问题,请参考以下文章

无法从 ArcGIS API for Python 检索 ArcGIS 角色

arcgis api for javascript怎么加载天地图的影像图

arcgis api for javascript中怎么获取当前地图的大小

ArcGIS API For Android Errors汇总

arcgis api for javascript 4.10版本的本地部署

如何利用arcgis api for javascript在graphicslayer绘制点线面