#region 降雨动画演示 2014-04-16List<Graphic> graphics = new List<Graphic>();int INDEX = 0;MapPoint GLOBAL = new MapPoint(); //保存上一次绘制降雨圈的点信息 2014-04-16 int INDEX_2 = 0; //控制是否是第一次绘制降雨圈/// <summary>/// 从数据库获取数据,并绘制圆/// </summary>public void DrawRainEllipseFromDatabase(){getMapDataSoapClient client = new getMapDataSoapClient();client.getJYDataByTimeSpanCompleted += new EventHandler<getJYDataByTimeSpanCompletedEventArgs>(client_getJYDataByTimeSpanCompleted);client.getJYDataByTimeSpanAsync("2014-04-08", "2014-04-11");}void client_getJYDataByTimeSpanCompleted(object sender, getJYDataByTimeSpanCompletedEventArgs e){//GraphicsLayer graphicsLayer = myMap.Layers["YLPointsLayer"] as GraphicsLayer;//graphicsLayer.ClearGraphics();ObservableCollection<JYDW> rets = e.Result;Graphic graphic;foreach (JYDW item in rets){graphic = new Graphic(){Geometry = mercator.FromGeographic(new MapPoint(double.Parse(item.LGTD.ToString().Trim()), double.Parse(item.LTTD.ToString().Trim()))),Symbol = LayoutRoot.Resources["BlueMarkerSymbol"] as Symbol};//保存属性graphic.Attributes["STCD"] = item.CMAXSTCD; //雨量站编码graphic.Attributes["TM"] = item.TM; //时间graphic.Attributes["RainV"] = item.CDRP; //雨量站名称graphic.Attributes["CDNUM"] = item.CDNUM; //降雨站数graphic.Attributes["LGTD"] = item.LGTD; //经度graphic.Attributes["LTTD"] = item.LTTD; //纬度graphics.Add(graphic);//graphicsLayer.Graphics.Add(graphic);}}/// <summary>/// 在地图上绘制圆/// </summary>/// <param name="myMap">地图</param>/// <param name="container">绘制容器</param>/// <param name="pt">要绘制的点</param>/// <param name="drawCircleLayer"></param>/// <param name="circleKm">直径</param>/// <param name="color">填充色</param>/// <param name="ellipseStroke">边框色</param>public void DrawEllipse(Map myMap, Canvas container, MapPoint pt, ref ElementLayer drawCircleLayer, double circleKm, Color color, Color ellipseStroke){if (!drawCircleLayer.Children.Contains(container)){drawCircleLayer.Children.Add(container);container.Opacity = 0.7;container.SetValue(ElementLayer.EnvelopeProperty, new Envelope(myMap.Extent.XMax, myMap.Extent.YMax, myMap.Extent.XMin, myMap.Extent.YMin));}Point ptFirst = myMap.MapToScreen(new MapPoint(Convert.ToDouble(pt.X), Convert.ToDouble(pt.Y)));Point pt7 = myMap.MapToScreen(new MapPoint((Convert.ToDouble(pt.X) + (circleKm * 1000)), Convert.ToDouble(pt.Y)));Ellipse ellipse7 = new Ellipse();ellipse7.Width = (pt7.X - ptFirst.X)*2;ellipse7.Height = ellipse7.Width;ellipse7.StrokeThickness = 1;ellipse7.Stroke = new SolidColorBrush(ellipseStroke);ellipse7.Fill = new SolidColorBrush(color);Canvas.SetLeft(ellipse7, ptFirst.X - ellipse7.Width / 2);Canvas.SetTop(ellipse7, ptFirst.Y - ellipse7.Width / 2);ellipse7.Opacity = 0.7;container.Children.Add(ellipse7);container.IsHitTestVisible = false;container.SetValue(Canvas.ZIndexProperty, 1);GLOBAL = WKIDConvert.mercator2lonlat(ESRI.ArcGIS.Client.Geometry.Geometry.NormalizeCentralMeridian(pt) as ESRI.ArcGIS.Client.Geometry.MapPoint);//每次绘制降雨圈后,将值保存起来}/// <summary>/// 绘制点/// </summary>public void DrawPoint(MapPoint mp,Graphic g){GraphicsLayer graphicsLayer = myMap.Layers["YLPointsLayer"] as GraphicsLayer;GraphicsLayer graphicsLayerText = myMap.Layers["GraphicsLayerRed"] as GraphicsLayer;//动态标记点元素Graphic graphic = new Graphic(){Geometry = mp,Symbol = LayoutRoot.Resources["BlueMarkerSymbol"] as Symbol};graphicsLayer.Graphics.Add(graphic);//动态标记数值TextSymbol textSymbol = new TextSymbol(){FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"),Foreground = new System.Windows.Media.SolidColorBrush(ColorRevert.ToColor(tip_Base.DXT_COLOR)),FontSize = 16,Text = g.Attributes["RainV"].ToString(),OffsetX = 10,OffsetY = 23};Graphic graphicText = new Graphic(){Geometry = mp,Symbol = textSymbol};graphicsLayerText.Graphics.Add(graphicText);}/// <summary>/// 绘制连接线/// </summary>public void DrawLine(MapPoint gS, MapPoint gE){List<ESRI.ArcGIS.Client.Geometry.Polyline> polylineList = new List<ESRI.ArcGIS.Client.Geometry.Polyline>();ESRI.ArcGIS.Client.Geometry.PointCollection pointCollection = new ESRI.ArcGIS.Client.Geometry.PointCollection();pointCollection.Add(gS);pointCollection.Add(gE);ESRI.ArcGIS.Client.Geometry.Polyline polyline = new ESRI.ArcGIS.Client.Geometry.Polyline();polyline.Paths.Add(pointCollection);polylineList.Add(polyline);GraphicsLayer graphicsLayer = myMap.Layers["GraphicsDWLine"] as GraphicsLayer;foreach (ESRI.ArcGIS.Client.Geometry.Polyline pl in polylineList){Graphic graphic = new Graphic(){Symbol = LayoutRoot.Resources["DefaultLineSymbol"] as Symbol,Geometry = mercator.FromGeographic(pl)};graphicsLayer.Graphics.Add(graphic);}}/// <summary>/// 绘制每小时降雨圈/// </summary>/// <param name="myMap"></param>/// <param name="sender"></param>public void DrawEllipseHourRainCircle(Map myMap, object sender){INDEX_2++;if (GisMap.LayerExist(myMap, "RainAnimationLayer")){GisMap.DeleteLayersToMap(myMap, "RainAnimationLayer");}ElementLayer circleLayer = new ElementLayer();circleLayer.ID = "RainAnimationLayer";Canvas circleCanvas = new Canvas();Graphic tipGraphic = sender as Graphic;//通过过滤为0的值,这样经纬度坐标没有值的也被过滤掉if (Convert.ToDouble(tipGraphic.Attributes["RainV"]) != 0){Color color = new Color();double V = double.Parse(tipGraphic.Attributes["RainV"].ToString());if (V < 10){color = ColorRevert.ToColor("#FF3FC816");}else if (V >= 10 && V < 25){color = ColorRevert.ToColor("#FF1016FE");}else if (V >= 25 && V < 50){color = ColorRevert.ToColor("#FFFFEB00");}else if (V >= 50 && V < 100){color = ColorRevert.ToColor("#FFFF871C");}else if (V >= 100 && V < 200){color = ColorRevert.ToColor("#FFEB27A5");}else if (V >= 200){color = ColorRevert.ToColor("#FFE8353B");}//第一步:绘制降雨点DrawPoint(WKIDConvert.lonlat2mercator(new MapPoint(Convert.ToDouble(tipGraphic.Attributes["LGTD"]),Convert.ToDouble(tipGraphic.Attributes["LTTD"]))), tipGraphic);//第二步:绘制站点连接线if (INDEX_2 == 1){DrawLine(new MapPoint(Convert.ToDouble(tipGraphic.Attributes["LGTD"]),Convert.ToDouble(tipGraphic.Attributes["LTTD"])), new MapPoint(Convert.ToDouble(tipGraphic.Attributes["LGTD"]),Convert.ToDouble(tipGraphic.Attributes["LTTD"])));}else{DrawLine(GLOBAL, new MapPoint(Convert.ToDouble(tipGraphic.Attributes["LGTD"]),Convert.ToDouble(tipGraphic.Attributes["LTTD"])));}//第三步:绘制降雨圈this.DrawEllipse(myMap, circleCanvas, WKIDConvert.lonlat2mercator(new MapPoint(Convert.ToDouble(tipGraphic.Attributes["LGTD"]),Convert.ToDouble(tipGraphic.Attributes["LTTD"]))), ref circleLayer,Convert.ToDouble(tipGraphic.Attributes["CDNUM"]), color, color);}GisMap.AddLayersToMap(myMap, new ElementLayer[] { circleLayer });}DispatcherTimer timer = new DispatcherTimer();private void btnDW_Click(object sender, System.Windows.RoutedEventArgs e){DrawRainEllipseFromDatabase(); // 先绘点并保存数据double d = 1;try{d = double.Parse(this.tbSecond.Text.Trim());}catch (Exception){MessageBox.Show("请输入数字!");}timer.Interval = TimeSpan.FromSeconds(d);timer.Tick += new EventHandler(timer_Tick);timer.Start();}void timer_Tick(object sender, EventArgs e){try{if (INDEX < graphics.Count){DrawEllipseHourRainCircle(myMap, graphics[INDEX]);this.tb_SJ.Text = "";this.tb_ZM.Text = "";this.tb_YL.Text = "";this.tb_SJ.Text = DateTime.Parse(graphics[INDEX].Attributes["TM"].ToString()).ToString("yyyy-MM-dd HH:mm");this.tb_ZM.Text = graphics[INDEX].Attributes["STCD"].ToString().Trim();this.tb_YL.Text = graphics[INDEX].Attributes["RainV"].ToString().Trim();INDEX++; //自增}else{//INDEX = 0;timer.Stop(); //动画过程停止}}catch (Exception ex){return;}}#endregion

ArcGIS API for Silverlight 绘制降雨路径动画相关推荐

  1. 使用ArcGIS API for Silverlight + Visifire绘制地图统计图

    转载地址:http://www.cnblogs.com/potential/archive/2013/03/19/2966866.html 本文示例用的版本为: Silverlight 5+Visif ...

  2. ArcGIS API for Silverlight 调用GP服务绘制等值面

    原文:ArcGIS API for Silverlight 调用GP服务绘制等值面 GP服务模型如下图: 示例效果图片如下:

  3. ArcGIS API for Silverlight 点沿着线流动

    原文:ArcGIS API for Silverlight 点沿着线流动 概述 前段时间做了一个项目,要求是有一些电力输送线,电力输送线或者石油管道都是有流动方向的,用户想做一个动态效果来模拟电力的输 ...

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

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

  5. ArcGIS API for Silverlight开发入门

    ArcGIS API for Silverlight开发入门 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都 ...

  6. ArcGIS API for Silverlight 实现修改地图上的工程点位置

    ArcGIS API for Silverlight 实现修改地图上的工程点位置 原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击 ...

  7. ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件...

    原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...

  8. ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题

    ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时,使用Cluster ...

  9. ArcGIS API for Silverlight中legend控件显示图例问题

    转自http://www.gisall.com/html/34/9534-5141.html 在使用ArcGIS API for Silverlight进行地图展示应用的时候,我们都会设置地图图层列表 ...

最新文章

  1. 前端必须会的基本知识题目
  2. 移植net-snmp 出现的编译问题 ./libs/libnetsnmpsnmpd.a(snmpd.o): relocation R_ARM_THM_MOVW_ABS_NC against `
  3. 风控大咖教你四步开发风控模型
  4. 重新定义“人货场”:淘宝情景计算探索实践
  5. 提前批无笔试,3天后截止!!字节跳动智能创作实验室-图像团队2022秋招提前批投递...
  6. 小智伴机器人使用说明_智伴机器人丨史上最全功能,玩转小智伴看这里!
  7. SQL Server中,varchar和nvarchar如何选择
  8. php win8 下载64位下载,万能驱动助理(e驱动) Win8.1 64位专版 6.6 官方版
  9. IOS – OpenGL ES 图像侵蚀边缘色彩模糊 GPUImageRGBErosionFilter
  10. mysql存储过程 outfile_mysql存储过程 outfile
  11. 一周信创舆情观察(2.14~2.20)
  12. Axure RP9授权码适合3658版本,亲测可用
  13. 机器视觉之缺陷检测的光源
  14. 基于微信小程序的驾驶证模拟考试系统的设计与实现
  15. 网秦大战奇虎360?先看看双方实力对比
  16. 【慕课笔记】第五章 JAVA中的集合框架(中) 第1节 MapHashMap简介
  17. srm软件非生产采购的解决方案
  18. Linux权限全面解析 (欢迎各位Linux选手看过来,读到就是赚到)
  19. 【云计算虚拟化】虚拟化学习认识总结
  20. 路由器wds设置最终版、一些ios基础知识

热门文章

  1. 微信公众号使用Emoji表情
  2. linux trac svn,Ubuntu安装Trac SVN
  3. web端接入微信小程序扫码进行登录
  4. 泰拉瑞亚手机版html,泰拉瑞亚提基套装怎么得 提基套装属性详解
  5. 如何制作动画效果的文字图片?教你一键合成gif动画
  6. 《老头滚动条5》买屋 周详方案向导
  7. 台阶的意思_台阶词语解释
  8. 分析ajax爬取果壳网
  9. 三更灯火五更鸡,正是男儿读书时
  10. stm32外挂spiflash的烧录算法