ArcGIS API for Silverlight 绘制降雨路径动画
#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 绘制降雨路径动画相关推荐
- 使用ArcGIS API for Silverlight + Visifire绘制地图统计图
转载地址:http://www.cnblogs.com/potential/archive/2013/03/19/2966866.html 本文示例用的版本为: Silverlight 5+Visif ...
- ArcGIS API for Silverlight 调用GP服务绘制等值面
原文:ArcGIS API for Silverlight 调用GP服务绘制等值面 GP服务模型如下图: 示例效果图片如下:
- ArcGIS API for Silverlight 点沿着线流动
原文:ArcGIS API for Silverlight 点沿着线流动 概述 前段时间做了一个项目,要求是有一些电力输送线,电力输送线或者石油管道都是有流动方向的,用户想做一个动态效果来模拟电力的输 ...
- ArcGIS API for Silverlight 调用GP服务准备---GP模型建立、发布、测试
ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发 ...
- ArcGIS API for Silverlight开发入门
ArcGIS API for Silverlight开发入门 你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都 ...
- ArcGIS API for Silverlight 实现修改地图上的工程点位置
ArcGIS API for Silverlight 实现修改地图上的工程点位置 原文:ArcGIS API for Silverlight 实现修改地图上的工程点位置 #region 处理工程点点击 ...
- ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件...
原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...
- ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题
ArcGIS API for Silverlight地图加载众多点时,使用Clusterer解决重叠问题 原文:ArcGIS API for Silverlight地图加载众多点时,使用Cluster ...
- ArcGIS API for Silverlight中legend控件显示图例问题
转自http://www.gisall.com/html/34/9534-5141.html 在使用ArcGIS API for Silverlight进行地图展示应用的时候,我们都会设置地图图层列表 ...
最新文章
- 前端必须会的基本知识题目
- 移植net-snmp 出现的编译问题 ./libs/libnetsnmpsnmpd.a(snmpd.o): relocation R_ARM_THM_MOVW_ABS_NC against `
- 风控大咖教你四步开发风控模型
- 重新定义“人货场”:淘宝情景计算探索实践
- 提前批无笔试,3天后截止!!字节跳动智能创作实验室-图像团队2022秋招提前批投递...
- 小智伴机器人使用说明_智伴机器人丨史上最全功能,玩转小智伴看这里!
- SQL Server中,varchar和nvarchar如何选择
- php win8 下载64位下载,万能驱动助理(e驱动) Win8.1 64位专版 6.6 官方版
- IOS – OpenGL ES 图像侵蚀边缘色彩模糊 GPUImageRGBErosionFilter
- mysql存储过程 outfile_mysql存储过程 outfile
- 一周信创舆情观察(2.14~2.20)
- Axure RP9授权码适合3658版本,亲测可用
- 机器视觉之缺陷检测的光源
- 基于微信小程序的驾驶证模拟考试系统的设计与实现
- 网秦大战奇虎360?先看看双方实力对比
- 【慕课笔记】第五章 JAVA中的集合框架(中) 第1节 MapHashMap简介
- srm软件非生产采购的解决方案
- Linux权限全面解析 (欢迎各位Linux选手看过来,读到就是赚到)
- 【云计算虚拟化】虚拟化学习认识总结
- 路由器wds设置最终版、一些ios基础知识