原文: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>
/// 从数据库获取数据,并绘制圆
/// </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绘制地图统计图

    原文:使用ArcGIS API for Silverlight + Visifire绘制地图统计图 最近把很久之前做的统计图又拿出来重新做了一遍,感觉很多时候不复习,不记录就真的忘了,时间是最好的稀释 ...

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

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

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

    原文:ArcGIS API for Silverlight 调用GP服务加载等值线图层 第二篇.Silverlight客户端调用GP服务 利用ArcGIS API for Silverlight实现G ...

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

    原文:ArcGIS API for Silverlight 调用GP服务准备---GP模型建立.发布.测试 第一篇.GP降雨量等值线建模.发布及测试 在水利.气象等行业中,要在WebGIS中实现空间分 ...

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

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

  6. ArcGIS API for Silverlight开发入门

    你用上3G手机了吗?你可能会说,我就是喜欢用nokia1100,ABCDEFG跟我 都没关系.但你不能否认3G是一种趋势,最终我们每个人都会被包裹在3G网络中.1100也不是一成不变,没准哪天为了打击 ...

  7. 使用ArcGIS API for Silverlight实现地形坡度在线分析

    原文:使用ArcGIS API for Silverlight实现地形坡度在线分析 苦逼的研究生课程终于在今天结束了,也许从今以后再也不会坐在大学的课堂上正式的听老师讲课了,接下来的时间就得开始找工作 ...

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

    原文:使用Visifire+ArcGIS API for Silverlight实现Graphic信息的动态图表显示 首先来看一看实现的效果: PS:原始的程序中更新曲线数据时添加了过渡的效果,具体可 ...

  9. arcgis api for silverlight

    原文 http://blog.sina.com.cn/s/blog_4638cf7b0100wntt.html arcgis api for silverlight(1) (2011-09-21 09 ...

随机推荐

  1. POJ1511 Invitation Cards(多源单汇最短路)

    边取反,从汇点跑单源最短路即可. #include<cstdio> #include<cstring> #include<queue> #include<al ...

  2. 利用pingyin4j 将汉字转换为拼音

    jar包:http://pan.baidu.com/s/11ikCY import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

  3. 【BZOJ】1090: [SCOI2003]字符串折叠(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1090 随便yy一下.. 设f[i,j]表示i-j的最小长度 f[i, j]=min{j-i+1, f ...

  4. [原]Android Studio查询SHA1的方法

    前提:C:\Users\Administrator\AndroidStudioProjects文件夹中存在xxx.jks秘钥文件,比如: 进入Android Studio的Terminal: Micr ...

  5. SSh结合Easyui实现Datagrid的分页显示

    近日学习Easyui,发现非常好用,界面很美观.将学习的心得在此写下,这篇博客写SSh结合Easyui实现Datagrid的分页显示,其他的例如添加.修改.删除.批量删除等功能将在后面的博客一一写来. ...

  6. 【iCore、iCore2、iBoard例程】【异步FIFO跨时钟域通信(通过ARM 读FPGA FIFO)】

    欢迎访问电子工程师学堂,以便了解更多内容:http://www.eeschool.org 一.本实验基于iCore2 完成,通过简单改动,即可用在 iCore 核心板.iBoard 电子学堂上. iC ...

  7. NSQ:分布式消息队列学习记录

    参考资料: NSQ:分布式的实时消息平台 初识NSQ分布式实时消息架构 深入NSQ之旅 nsq topic和channel的区别

  8. Redis学习手册(Key操作命令)

    一.概述: 在该系列的前几篇博客中,主要讲述的是与Redis数据类型相关的命令,如String.List.Set.Hashes和Sorted-Set.这些命 令都具有一个共同点,即所有的操作都是针对与 ...

  9. MuPlayer『百度音乐播放内核』

    MuPlayer『百度音乐播放内核』 —— 跨平台.轻量级的音频播放解决方案. 多端(PC & WebApp)通用,统一的API调用方式 HTML5 Audio与Flash内核的平滑切换(支持 ...

  10. linux进程查找及杀死

    根据进程名称查找 ps aux|grep python(进程名) 杀死进程: kill -s 9 进程id