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

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

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

时间: 2024-08-04 07:34:25

ArcGIS API for Silverlight动态标绘的实现的相关文章

使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示

原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示   首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可查看官网的示例: http://www.visifire.com/silverlight_spline_charts_gallery.php 点击其中的一个例子,然后点击Live Updates,就可看到数据更新时的过渡效果.但是蛋疼的博客园,不知道为什么,我插入了我原始的xap文件,过渡效果却

ArcGIS API for Silverlight 绘制降雨路径动画

原文:ArcGIS API for Silverlight 绘制降雨路径动画 #region 降雨动画演示 2014-04-16 List<Graphic> graphics = new List<Graphic>(); int INDEX = 0; MapPoint GLOBAL = new MapPoint(); //保存上一次绘制降雨圈的点信息 2014-04-16 int INDEX_2 = 0; //控制是否是第一次绘制降雨圈 /// <summary> //

ArcGIS API for Silverlight开发入门

你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击犯罪,会在你的1100上强制 装上GPS.GIS工作既然建立在计算机的基础上,当然也得随着IT行业与时俱进.       看看现在计算机应用的趋势吧.云(计算),这个东西可讲不清楚,因为云嘛,飘忽不定的.不过可以这样来看它,以后计算机网络上就有一坨(或者几坨)万能的 云,有什么需求云都可以满足我们,

ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用

原文:ArcGIS API for Silverlight 之ElementLayer使用及TextSymbol的模板使用 在开发中动态在地图上添加文字信息,可以使用TextSymbol添加文字 //动态添加文本 TextSymbol textSymbol = new TextSymbol() { FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"), Foreground = new System.Wi

ArcGIS API for Silverlight 点沿着线流动

原文:ArcGIS API for Silverlight 点沿着线流动 概述 前段时间做了一个项目,要求是有一些电力输送线,电力输送线或者石油管道都是有流动方向的,用户想做一个动态效果来模拟电力的输送.其实做简单了只要在线上标识个箭头就可以了.但也要是做成动态的,至少ArcEngine实现起来是有点麻烦的.但ArcGIS API for Silverlight可以解决这个问题. 实现思路 在地图上展示输送电力的线和模拟电力输送方向的电都是ArcGIS  API中定义的对象,否者这些数据在地图上

ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案

原文:ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案 根据实际JPG图片进行配准后,发布的地图,利用ArcGIS API for Silverlight在网页上显示的时候,原先的文字总有倾斜的现象,如何解决?   图一.配准后有文字倾斜现象的地图 解决方案如下:      <esri:Map x:Name="myMap" IsLogoVisible="False" ZoomDuration="0:00:01&

ArcGIS API for Silverlight 调用GP服务加载等值线图层

原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层                                                                                                    第二篇.Silverlight客户端调用GP服务          利用ArcGIS API for Silverlight实现GP服务调用,这里的雨量数据是通过一个WebService获取而来,主要信息是雨量站点

ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法

原文:ArcGIS API for Silverlight 调用WebService出现跨域访问报错的解决方法       群里好几个朋友都提到过这样的问题,说他们在Silverlight中调用了WebService方法,总报这个错误,贴图如下: 解决办法:      1.确定你的Silverlight项目及承载Silverlight的Web程序根目录下都包含2个跨域文件,分别是crossdomain.xml和clientaccesspolicy.xml:  crossdomain.xml文件,

ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试

原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试                                                                                                                      第一篇.GP降雨量等值线建模.发布及测试          在水利.气象等行业中,要在WebGIS中实现空间分析功能,如绘制等值线.等高线.等直面.缓冲区等都