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

二篇、Silverlight客户端调用GP服务

         利用ArcGIS API for Silverlight实现GP服务调用,这里的雨量数据是通过一个WebService获取而来,主要信息是雨量站点的经纬度坐标值和某个时间段内的降雨量值三个主要字段。

以下是核心代码部分:

 

[csharp]  view plain copy
  1. <UserControl  
  2.     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  
  3.     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
  4.     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"  
  5.     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  
  6.     xmlns:esri="http://schemas.esri.com/arcgis/client/2009"  
  7.     xmlns:controlsToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"  
  8.     xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="TestDZX.MainPage2"  
  9.     mc:Ignorable="d"  
  10.     d:DesignHeight="300" d:DesignWidth="400">  
  11.     <controlsToolkit:BusyIndicator x:Name="busyIndicator" BusyContent="正在加载,请稍等..." IsBusy="True">  
  12.         <Grid x:Name="LayoutRoot" Background="White">            <esri:Map x:Name="myMap"  IsLogoVisible="False" ZoomDuration="0:00:00" PanDuration="0:00:00"  
  13.                   Extent="117.647738815324,29.4704217183843,118.446182957997,30.4124245048916">  
  14.                 <esri:ArcGISTiledMapServiceLayer ID="BaseLayer" Url="http://localhost/arcgis/rest/services/HSDQ/MapServer/"/>  
  15.                 <!--等值线和等直面图层-->  
  16.                 <esri:GraphicsLayer ID="GraphicsDZX"/>  
  17.             </esri:Map>  
  18.             <Grid x:Name="gridMain" HorizontalAlignment="Left" Width="215" Margin="1,0,0,0">  
  19.                 <Grid.ColumnDefinitions>  
  20.                     <ColumnDefinition Width="200" x:Name="gridSub2" />  
  21.                     <ColumnDefinition Width="15" x:Name="gridSub1"/>  
  22.                 </Grid.ColumnDefinitions>  
  23.                 <Grid  Grid.Column="1" Background="#FFD2D4D1" Width="15" Margin="-1,0,0,0" d:LayoutOverrides="HorizontalMargin">  
  24.                     <Border BorderBrush="#FFA5C6E5" BorderThickness="2" Width="15">  
  25.                         <Image x:Name="imgExpandOrCollapsed" Margin="0,136,0,117" Source="Images/ss.png" Stretch="Fill" Height="45" MouseLeftButtonDown="imgExpandOrCollapsed_MouseLeftButtonDown" MouseLeftButtonUp="imgExpandOrCollapsed_MouseLeftButtonUp" Cursor="Hand" ToolTipService.ToolTip="收缩/展开"/>  
  26.                     </Border>  
  27.                 </Grid>  
  28.                 <Grid  Width="200" HorizontalAlignment="Left" Background="#FFD2D4D1">  
  29.                     <Grid.RowDefinitions>  
  30.                         <RowDefinition Height="0.095*"/>  
  31.                         <RowDefinition Height="0.905*"/>  
  32.                     </Grid.RowDefinitions>  
  33.                     <StackPanel Margin="0" Grid.Row="1" VerticalAlignment="Top">  
  34.                         <Grid Height="40" d:LayoutOverrides="Height, VerticalMargin" VerticalAlignment="Top">  
  35.                             <sdk:DatePicker x:Name="dpStart" Margin="38,6,65,6"/>  
  36.                             <ComboBox x:Name="cbStart" HorizontalAlignment="Right" Margin="0,6,16,6" Width="49"/>  
  37.                             <TextBlock HorizontalAlignment="Left" Margin="3,0,0,0" TextWrapping="Wrap" Text="起始:" Width="40" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center"/>  
  38.                             <TextBlock TextWrapping="Wrap" Text="时" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center" HorizontalAlignment="Right" Width="15" Margin="0,0,1,0"/>  
  39.                         </Grid>  
  40.                         <Grid Height="40" d:LayoutOverrides="Height, VerticalMargin">  
  41.                             <sdk:DatePicker x:Name="dpEnd" Margin="38,6,65,6"/>  
  42.                             <ComboBox x:Name="cbEnd" HorizontalAlignment="Right" Margin="0,6,16,6" Width="49"/>  
  43.                             <TextBlock HorizontalAlignment="Left" Margin="3,0,0,0" TextWrapping="Wrap" Text="截至:" Width="40" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center"/>  
  44.                             <TextBlock TextWrapping="Wrap" Text="时" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center" HorizontalAlignment="Right" Width="15" Margin="0,0,1,0"/>  
  45.                         </Grid>  
  46.                         <Grid Height="40" d:LayoutOverrides="Height, VerticalMargin">  
  47.                             <ComboBox x:Name="cbRainGrade" Margin="68,6,0,6"/>  
  48.                             <TextBlock HorizontalAlignment="Left" Margin="4,0,0,0" TextWrapping="Wrap" Text="雨量级别:" Width="69" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center"/>  
  49.                         </Grid>  
  50.                         <Grid Height="40" d:LayoutOverrides="Height, VerticalMargin">  
  51.                             <RadioButton x:Name="rb1" Content="稀" Margin="70,11,67,1" FontSize="13.333" FontFamily="Microsoft YaHei" GroupName="rbGroup" IsChecked="True" Cursor="Hand" Click="rb_Click"/>  
  52.                             <TextBlock HorizontalAlignment="Left" Margin="4,0,0,0" TextWrapping="Wrap" Text="过滤级:" Width="55" FontSize="13.333" FontFamily="Microsoft YaHei" VerticalAlignment="Center"/>  
  53.                             <RadioButton x:Name="rb2" Content="密" Margin="0,12,8,0" FontSize="13.333" FontFamily="Microsoft YaHei" HorizontalAlignment="Right" Width="55" GroupName="rbGroup" Cursor="Hand" Click="rb_Click"/>  
  54.                         </Grid>  
  55.                         <Grid Height="40" d:LayoutOverrides="Height, VerticalMargin">  
  56.                             <Button x:Name="btnAnalysis" Content="等值线分析" Margin="64,0,63,0" VerticalAlignment="Center" Cursor="Hand" FontSize="13.333" FontFamily="Microsoft YaHei" d:LayoutOverrides="Width" Click="btnAnalysis_Click"/>  
  57.                         </Grid>  
  58.                     </StackPanel>  
  59.                     <Border BorderBrush="#FF459BFB" BorderThickness="2" Background="#FF449DFF" Height="30" VerticalAlignment="Top">  
  60.                         <TextBlock HorizontalAlignment="Center" Margin="0" TextWrapping="Wrap" Text="专 题 分 析" Width="82" FontSize="16" FontFamily="Microsoft YaHei" VerticalAlignment="Center" Foreground="White"/>  
  61.                     </Border>  
  62.                 </Grid>  
  63.             </Grid>  
  64.         </Grid>  
  65.     </controlsToolkit:BusyIndicator>  
  66. </UserControl>  
  67.   
  68.   
  69.    
  70.   
  71. using System;  
  72. using System.Collections.Generic;  
  73. using System.Linq;  
  74. using System.Net;  
  75. using System.Windows;  
  76. using System.Windows.Controls;  
  77. using System.Windows.Documents;  
  78. using System.Windows.Input;  
  79. using System.Windows.Media;  
  80. using System.Windows.Media.Animation;  
  81. using System.Windows.Shapes;using ESRI.ArcGIS.Client;  
  82. using ESRI.ArcGIS.Client.Geometry;  
  83. using ESRI.ArcGIS.Client.Tasks;  
  84. using System.Net.Browser;  
  85. using ESRI.ArcGIS.Client.Symbols;  
  86. using TestDZX.ServiceReference1;  
  87. using System.Collections.ObjectModel;  
  88. using System.Collections;  
  89. using System.Windows.Media.Imaging;  
  90. using System.Threading;  
  91. using System.Globalization;  
  92. using Syit.CommonClass;namespace TestDZX  
  93. {  
  94.     public partial class MainPage2 : UserControl  
  95.     {  
  96.         /******************GP参数* 2012-08-29***********************/        private Geoprocessor _ContourTask; //等值线GP  
  97.         public struct EvaluationPointStruct  
  98.         {  
  99.             public double Latitute; //纬度  
  100.             public double Longitute; //经度  
  101.             public double YL; //雨量  
  102.         };  
  103.         public EvaluationPointStruct[] evaluatePoints;  
  104.         private FeatureSet featureSet;//作为GP输入参数的要素集        ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();        public int Contour_interval = 5; //默认是5表示稀,1表示密  
  105.         /*********************************************************/        public MainPage2()  
  106.         {  
  107.             InitializeComponent();  
  108.             //设置日期格式  
  109.             Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();  
  110.             Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd";  
  111.             //加载日期  
  112.             this.dpStart.SelectedDate = (DateTime?)DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"));  
  113.             this.dpEnd.SelectedDate = (DateTime?)DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd"));  
  114.             //加载小时及雨量级别  
  115.             BindElement();  
  116.             //初次加载前日八时到现在小时的数据  
  117.             DrawContourUseGP();  
  118.         }        #region 页面上数据绑定        public void BindElement()  
  119.         {  
  120.             //起始小时绑定  
  121.             this.cbStart.Items.Add("00");  
  122.             this.cbStart.Items.Add("01");  
  123.             this.cbStart.Items.Add("02");  
  124.             this.cbStart.Items.Add("03");  
  125.             this.cbStart.Items.Add("04");  
  126.             this.cbStart.Items.Add("05");  
  127.             this.cbStart.Items.Add("06");  
  128.             this.cbStart.Items.Add("07");  
  129.             this.cbStart.Items.Add("08");  
  130.             this.cbStart.Items.Add("09");  
  131.             this.cbStart.Items.Add("10");  
  132.             this.cbStart.Items.Add("11");  
  133.             this.cbStart.Items.Add("12");  
  134.             this.cbStart.Items.Add("13");  
  135.             this.cbStart.Items.Add("14");  
  136.             this.cbStart.Items.Add("15");  
  137.             this.cbStart.Items.Add("16");  
  138.             this.cbStart.Items.Add("17");  
  139.             this.cbStart.Items.Add("18");  
  140.             this.cbStart.Items.Add("19");  
  141.             this.cbStart.Items.Add("20");  
  142.             this.cbStart.Items.Add("21");  
  143.             this.cbStart.Items.Add("22");  
  144.             this.cbStart.Items.Add("23");  
  145.             this.cbStart.SelectedIndex = 8;            //结束时间绑定  
  146.             this.cbEnd.Items.Add("00");  
  147.             this.cbEnd.Items.Add("01");  
  148.             this.cbEnd.Items.Add("02");  
  149.             this.cbEnd.Items.Add("03");  
  150.             this.cbEnd.Items.Add("04");  
  151.             this.cbEnd.Items.Add("05");  
  152.             this.cbEnd.Items.Add("06");  
  153.             this.cbEnd.Items.Add("07");  
  154.             this.cbEnd.Items.Add("08");  
  155.             this.cbEnd.Items.Add("09");  
  156.             this.cbEnd.Items.Add("10");  
  157.             this.cbEnd.Items.Add("11");  
  158.             this.cbEnd.Items.Add("12");  
  159.             this.cbEnd.Items.Add("13");  
  160.             this.cbEnd.Items.Add("14");  
  161.             this.cbEnd.Items.Add("15");  
  162.             this.cbEnd.Items.Add("16");  
  163.             this.cbEnd.Items.Add("17");  
  164.             this.cbEnd.Items.Add("18");  
  165.             this.cbEnd.Items.Add("19");  
  166.             this.cbEnd.Items.Add("20");  
  167.             this.cbEnd.Items.Add("21");  
  168.             this.cbEnd.Items.Add("22");  
  169.             this.cbEnd.Items.Add("23");  
  170.             DateTime dt = DateTime.Now;  
  171.             string hour = dt.Hour.ToString();  
  172.             if (hour.Length == 1)  
  173.             {  
  174.                 hour = "0" + hour;  
  175.             }  
  176.             switch (hour)  
  177.             {  
  178.                 case "00":  
  179.                     this.cbEnd.SelectedIndex = 0;  
  180.                     break;  
  181.                 case "01":  
  182.                     this.cbEnd.SelectedIndex = 1;  
  183.                     break;  
  184.                 case "02":  
  185.                     this.cbEnd.SelectedIndex = 2;  
  186.                     break;  
  187.                 case "03":  
  188.                     this.cbEnd.SelectedIndex = 3;  
  189.                     break;  
  190.                 case "04":  
  191.                     this.cbEnd.SelectedIndex = 4;  
  192.                     break;  
  193.                 case "05":  
  194.                     this.cbEnd.SelectedIndex = 5;  
  195.                     break;  
  196.                 case "06":  
  197.                     this.cbEnd.SelectedIndex = 6;  
  198.                     break;  
  199.                 case "07":  
  200.                     this.cbEnd.SelectedIndex = 7;  
  201.                     break;  
  202.                 case "08":  
  203.                     this.cbEnd.SelectedIndex = 8;  
  204.                     break;  
  205.                 case "09":  
  206.                     this.cbEnd.SelectedIndex = 9;  
  207.                     break;  
  208.                 case "10":  
  209.                     this.cbEnd.SelectedIndex = 10;  
  210.                     break;  
  211.                 case "11":  
  212.                     this.cbEnd.SelectedIndex = 11;  
  213.                     break;  
  214.                 case "12":  
  215.                     this.cbEnd.SelectedIndex = 12;  
  216.                     break;  
  217.                 case "13":  
  218.                     this.cbEnd.SelectedIndex = 13;  
  219.                     break;  
  220.                 case "14":  
  221.                     this.cbEnd.SelectedIndex = 14;  
  222.                     break;  
  223.                 case "15":  
  224.                     this.cbEnd.SelectedIndex = 15;  
  225.                     break;  
  226.                 case "16":  
  227.                     this.cbEnd.SelectedIndex = 16;  
  228.                     break;  
  229.                 case "17":  
  230.                     this.cbEnd.SelectedIndex = 17;  
  231.                     break;  
  232.                 case "18":  
  233.                     this.cbEnd.SelectedIndex = 18;  
  234.                     break;  
  235.                 case "19":  
  236.                     this.cbEnd.SelectedIndex = 19;  
  237.                     break;  
  238.                 case "20":  
  239.                     this.cbEnd.SelectedIndex = 20;  
  240.                     break;  
  241.                 case "21":  
  242.                     this.cbEnd.SelectedIndex = 21;  
  243.                     break;  
  244.                 case "22":  
  245.                     this.cbEnd.SelectedIndex = 22;  
  246.                     break;  
  247.                 case "23":  
  248.                     this.cbEnd.SelectedIndex = 23;  
  249.                     break;  
  250.             }  
  251.             //绑定雨量级别  
  252.             this.cbRainGrade.Items.Add("A:5,10,25,50,100,200");  
  253.             this.cbRainGrade.Items.Add("B:10,25,50,100,200,300");  
  254.             this.cbRainGrade.Items.Add("C:50,100,200,300,400,500,600");  
  255.             this.cbRainGrade.Items.Add("D:100,200,300,400,600,700");  
  256.             this.cbRainGrade.Items.Add("E:10,20,30,40,50,60");  
  257.             this.cbRainGrade.SelectedIndex = 0;  
  258.         }        #endregion        #region 调用GP服务绘制等值线        /// <summary>  
  259.         /// 调用GP服务绘制等值线  
  260.         /// </summary>  
  261.         public void DrawContourUseGP()  
  262.         {  
  263.             Thread.Sleep(1000);  
  264.             //加载之前,显示等待  
  265.             busyIndicator.IsBusy = true;            try  
  266.             {  
  267.                 getXQYJInfoSoapClient client = new getXQYJInfoSoapClient();  
  268.                 //水位数据  
  269.                 client.getSWRainByTimeSpanCompleted += new EventHandler<getSWRainByTimeSpanCompletedEventArgs>(client_getSWRainByTimeSpanCompleted);  
  270.                 client.getSWRainByTimeSpanAsync(DateTime.Parse(this.dpStart.SelectedDate.ToString().Split(' ')[0] + " " + this.cbStart.SelectedItem.ToString() + ":00:00"), DateTime.Parse(this.dpEnd.SelectedDate.ToString().Split(' ')[0] + " " + this.cbEnd.SelectedItem.ToString() + ":00:00"));  
  271.             }  
  272.             catch (Exception)  
  273.             {  
  274.                   
  275.             }  
  276.   
  277.         }         void client_getSWRainByTimeSpanCompleted(object sender, getSWRainByTimeSpanCompletedEventArgs e)  
  278.         {  
  279.             try  
  280.             {  
  281.                 //获取到所有的水文局雨量点  
  282.                 ObservableCollection<RainFall> lists = e.Result;  
  283.                 int PointsNum = lists.Count;//点的个数  
  284.                 evaluatePoints = new EvaluationPointStruct[PointsNum];  
  285.                 int index = 0;  
  286.                 foreach (RainFall item in lists)  
  287.                 {  
  288.                     if (item.YL24 != 0)  
  289.                     {  
  290.                         evaluatePoints[index].Latitute = item.Latitute;  
  291.                         evaluatePoints[index].Longitute = item.Longitute;  
  292.                         evaluatePoints[index].YL = item.YL24;  
  293.                         index++;  
  294.                     }  
  295.                 }  
  296.                 Utility.AddPointToMapLayer(myMap, evaluatePoints, out featureSet);                AccessGPService(featureSet);  
  297.             }  
  298.             catch (Exception)  
  299.             {  
  300.    
  301.             }  
  302.         }        private void AccessGPService(FeatureSet featureset)  
  303.         {  
  304.             try  
  305.             {  
  306.                 HttpWebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);  
  307.                 _ContourTask = new Geoprocessor("http://localhost/arcgis/rest/services/ContourServiceTool/GPServer/Contour");  
  308.                 List<GPParameter> parameters = new List<GPParameter>();  
  309.                 parameters.Add(new GPFeatureRecordSetLayer("Input_point_features", featureset));  
  310.                 parameters.Add(new GPDouble("Contour_interval", Contour_interval));  
  311.                 _ContourTask.UpdateDelay = 5000; // 10s的更新时间  
  312.                 _ContourTask.OutputSpatialReference = myMap.SpatialReference; //设置输出空间参考系  
  313.                 _ContourTask.JobCompleted += new EventHandler<JobInfoEventArgs>(geoprocessorTask_JobCompleted);  
  314.                 _ContourTask.Failed += new EventHandler<TaskFailedEventArgs>(geoprocessorTask_Failed);  
  315.                 _ContourTask.SubmitJobAsync(parameters);  
  316.             }  
  317.             catch (Exception)  
  318.             {  
  319.    
  320.             }  
  321.         }        /********************************事件处理程序段***************************************/        void geoprocessorTask_JobCompleted(object sender, JobInfoEventArgs e)  
  322.         {  
  323.             Geoprocessor gp = sender as Geoprocessor;  
  324.             //注册前缀  
  325.             HttpWebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);  
  326.             gp.GetResultDataCompleted += new EventHandler<GPParameterEventArgs>(gp_GetResultDataCompleted);  
  327.             gp.GetResultDataAsync(e.JobInfo.JobId, "Contour_Idw_11_Clip_SmoothLi_shp");            //加载完成,隐藏  
  328.             busyIndicator.IsBusy = false;  
  329.         }        void gp_GetResultDataCompleted(object sender, GPParameterEventArgs e)  
  330.         {  
  331.             //找到显示等值线图层并清空,然后再次加载  
  332.             GraphicsLayer layer = myMap.Layers["GraphicsDZX"as GraphicsLayer;  
  333.             layer.ClearGraphics();  
  334.             GPFeatureRecordSetLayer gplayer = e.Parameter as GPFeatureRecordSetLayer;  
  335.             int index = 0;  
  336.             foreach (Graphic graphic in gplayer.FeatureSet.Features)  
  337.             {  
  338.                 if (IsRainInGrade(graphic.Attributes["CONTOUR"].ToString()))  
  339.                 {  
  340.                     graphic.Symbol = new ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol()  
  341.                     {  
  342.                         Style = ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol.LineStyle.Solid,  
  343.                         Color = new SolidColorBrush(Colors.Red),  
  344.                         Width = 2  
  345.                     };                    layer.Graphics.Add(graphic); //添加红色的等值线  
  346.                     /****************************************************************************************/                    //标注数值  
  347.                     TextSymbol textSymbol = new TextSymbol()  
  348.                     {  
  349.                         FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"),  
  350.                         Foreground = new System.Windows.Media.SolidColorBrush(Color.FromArgb(255, 0, 0, 0)),  
  351.                         FontSize = 12,  
  352.                         Text = graphic.Attributes["CONTOUR"].ToString()  
  353.                     };  
  354.                     //寻找线段的中心点坐标位置  
  355.                     Graphic graphicText; //封闭曲线在曲线中间显示数值  
  356.                     Graphic graphicStart; //非封闭曲线的起始点  
  357.                     Graphic graphicEnd; //非封闭曲线的终止点  
  358.                     if (gplayer.FeatureSet.GeometryType == GeometryType.Polyline)  
  359.                     {  
  360.                         ESRI.ArcGIS.Client.Geometry.Polyline pl = gplayer.FeatureSet.Features[index].Geometry as ESRI.ArcGIS.Client.Geometry.Polyline;  
  361.                         MapPoint mp = pl.Extent.GetCenter();  
  362.                         if (pl.Paths != null && pl.Paths.Count > 0)  
  363.                         {  
  364.                             ESRI.ArcGIS.Client.Geometry.PointCollection path = pl.Paths[0];  
  365.                             if (path != null && path.Count > 0)  
  366.                             {  
  367.                                 int mid = path.Count / 2;  
  368.                                 mp = path[mid];  
  369.                                 if (path.Count == 2)  
  370.                                 {  
  371.                                     // path里面只有两个点的情况  
  372.                                     double x1 = (path[0] as MapPoint).X;  
  373.                                     double y1 = (path[0] as MapPoint).Y;  
  374.                                     double x2 = (path[1] as MapPoint).X;  
  375.                                     double y2 = (path[1] as MapPoint).Y;  
  376.                                     mp.X = x2 + (x1 - x2) / 2;  
  377.                                     mp.Y = y2 + (y1 - y2) / 2;  
  378.                                     //封闭的曲线  
  379.                                     graphicText = new Graphic()  
  380.                                     {  
  381.                                         Geometry = mercator.FromGeographic(mp),  
  382.                                         Symbol = textSymbol  
  383.                                     };  
  384.                                     //封闭的曲线在中间位置  
  385.                                     layer.Graphics.Add(graphicText); //添加数值  
  386.                                 }  
  387.                                 else  
  388.                                 {  
  389.                                     //起始  
  390.                                     graphicStart = new Graphic()  
  391.                                     {  
  392.                                         Geometry = mercator.FromGeographic(new MapPoint(path[0].X, path[0].Y)),  
  393.                                         Symbol = textSymbol  
  394.                                     };  
  395.                                     //结束  
  396.                                     graphicEnd = new Graphic()  
  397.                                     {  
  398.                                         Geometry = mercator.FromGeographic(new MapPoint(path[path.Count - 1].X, path[path.Count - 1].Y)),  
  399.                                         Symbol = textSymbol  
  400.                                     };  
  401.                                     layer.Graphics.Add(graphicStart); //标注起始数值  
  402.                                     layer.Graphics.Add(graphicEnd); //标注结束数值  
  403.                                 }  
  404.                             }  
  405.                         }  
  406.                     }  
  407.                 }  
  408.                 //索引自增字段  
  409.                 index++;  
  410.             }  
  411.         }        /// <summary>  
  412.         /// 地理处理失败,返回失败原因  
  413.         /// </summary>  
  414.         /// <param name="sender"></param>  
  415.         /// <param name="e"></param>  
  416.         void geoprocessorTask_Failed(object sender, TaskFailedEventArgs e)  
  417.         {  
  418.             MessageBox.Show(e.Error.ToString());  
  419.         }        /// <summary>  
  420.         /// 等值线分析按钮  
  421.         /// </summary>  
  422.         /// <param name="sender"></param>  
  423.         /// <param name="e"></param>  
  424.         private void btnAnalysis_Click(object sender, RoutedEventArgs e)  
  425.         {  
  426.             DrawContourUseGP();  
  427.         }        #endregion        #region 菜单处理选项及事件        private void imgExpandOrCollapsed_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)  
  428.         {  
  429.             e.Handled = true;  
  430.         }        private void imgExpandOrCollapsed_MouseLeftButtonUp(object sender, System.Windows.Input.MouseButtonEventArgs e)  
  431.         {  
  432.             if (this.gridSub2.Width == new GridLength(200, GridUnitType.Pixel))  
  433.             {  
  434.                 //处于展开状态  
  435.                 this.imgExpandOrCollapsed.Tag = "收缩面板";  
  436.                 Grid.SetColumnSpan(gridMain, 1);  
  437.                 this.gridSub2.Width = new GridLength(0, GridUnitType.Pixel);  
  438.                 Uri uri = new Uri("Images/zk.png", UriKind.Relative);  
  439.                 BitmapImage image = new BitmapImage(uri);  
  440.                 this.imgExpandOrCollapsed.Source = image;  
  441.             }  
  442.             else  
  443.             {  
  444.                 //处于收缩状态  
  445.                 this.imgExpandOrCollapsed.Tag = "展开面板";  
  446.                 Grid.SetColumnSpan(gridMain, 2);  
  447.                 this.gridSub2.Width = new GridLength(200, GridUnitType.Pixel);  
  448.                 Uri uri = new Uri("Images/ss.png", UriKind.Relative);  
  449.                 BitmapImage image = new BitmapImage(uri);  
  450.                 this.imgExpandOrCollapsed.Source = image;  
  451.             }  
  452.         }        /// <summary>  
  453.         /// 过滤级单选按钮的切换事件  
  454.         /// </summary>  
  455.         /// <param name="sender"></param>  
  456.         /// <param name="e"></param>  
  457.         private void rb_Click(object sender, RoutedEventArgs e)  
  458.         {  
  459.             RadioButton currRadioButton;  
  460.             currRadioButton = sender as RadioButton;  
  461.             if (currRadioButton != null && currRadioButton.IsChecked.Value)  
  462.             {  
  463.                 if (currRadioButton.Name == "rb1")  
  464.                 {  
  465.                     //首先赋值Contour_interval  
  466.                     Contour_interval = 5;  
  467.                     //改变值后,重新加载等值线  
  468.                     DrawContourUseGP();  
  469.                 }  
  470.                 else if (currRadioButton.Name == "rb2")  
  471.                 {  
  472.                     //首先赋值Contour_interval  
  473.                     Contour_interval = 1;  
  474.                     //改变值后,重新加载等值线  
  475.                     DrawContourUseGP();  
  476.                 }  
  477.             }  
  478.         }        #endregion        #region 根据雨量等级进行数据筛选        /// <summary>  
  479.         /// 判断一个降雨值取整数后,是否在雨量级别的数值中  
  480.         /// </summary>  
  481.         /// <param name="value"></param>  
  482.         /// <returns>在数值中的话,返回true,否则返回false</returns>  
  483.         public bool IsRainInGrade(string value)  
  484.         {  
  485.             bool flag = false;  
  486.             string[] list = this.cbRainGrade.SelectedItem.ToString().Trim().Split(':')[1].Split(',');  
  487.             foreach (string s in list)  
  488.             {  
  489.                 if (value.Trim() == s)  
  490.                 {  
  491.                     flag = true;  
  492.                 }  
  493.             }  
  494.             return flag;  
  495.         }  
  496.         #endregion  
  497.     }  
  498. }  
  499.   
  500.   
  501.   
  502.    
  503.   
  504.    
  505.   
  506. 使用到的另一个cs类文件如下Utility.cs文件如下  
  507.   
  508. using System;  
  509. using System.Net;  
  510. using System.Windows;  
  511. using System.Windows.Controls;  
  512. using System.Windows.Documents;  
  513. using System.Windows.Ink;  
  514. using System.Windows.Input;  
  515. using System.Windows.Media;  
  516. using System.Windows.Media.Animation;  
  517. using System.Windows.Shapes;  
  518. using ESRI.ArcGIS.Client.Geometry;  
  519. using ESRI.ArcGIS.Client;  
  520. using ESRI.ArcGIS.Client.Tasks;  
  521. using ESRI.ArcGIS.Client.Symbols;namespace TestDZX  
  522. {  
  523.     public class Utility  
  524.     {  
  525.         public static void AddPointToMapLayer(ESRI.ArcGIS.Client.Map map, MainPage2.EvaluationPointStruct[] evaluatePoints, out  ESRI.ArcGIS.Client.Tasks.FeatureSet featureset)  
  526.         {  
  527.             ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();            #region 动态添加预测点图层            if (map.Layers["YLPointsLayer"] != null)  
  528.             {  
  529.                 map.Layers.Remove(map.Layers["YLPointsLayer"]);  
  530.             }  
  531.             GraphicsLayer graphicslayer = new GraphicsLayer()  
  532.             {  
  533.                 ID = "YLPointsLayer",  
  534.             };  
  535.             map.Layers.Add(graphicslayer);            #endregion            #region 将降雨量点添加到图层中            featureset = new FeatureSet();  
  536.             if (evaluatePoints.Length != 0)  
  537.             {  
  538.                 foreach (MainPage2.EvaluationPointStruct evaluationpoint in evaluatePoints)  
  539.                 {  
  540.                     Graphic g = new Graphic()  
  541.                     {  
  542.                         Geometry = mercator.FromGeographic(new MapPoint(evaluationpoint.Latitute, evaluationpoint.Longitute)),  
  543.                         Symbol = new ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol()  
  544.                         {  
  545.                             Style = ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol.SimpleMarkerStyle.Circle,  
  546.                             Size = 5,  
  547.                             Color = new SolidColorBrush(Colors.Red)  
  548.                         }  
  549.                     };  
  550.                     g.Attributes.Add("YL", evaluationpoint.YL);  
  551.                     featureset.Features.Add(g);  
  552.                     graphicslayer.Graphics.Add(g);  
  553.                     //动态添加文本  
  554.                     TextSymbol textSymbol = new TextSymbol()  
  555.                     {  
  556.                         FontFamily = new System.Windows.Media.FontFamily("Microsoft YaHei"),  
  557.                         Foreground = new System.Windows.Media.SolidColorBrush(Color.FromArgb(255, 117, 20, 99)),  
  558.                         FontSize = 12,  
  559.                         Text = evaluationpoint.YL.ToString(),  
  560.                         OffsetX = 12,  
  561.                         OffsetY = -5  
  562.                     };                    Graphic graphicText = new Graphic()  
  563.                     {  
  564.                         Geometry = mercator.FromGeographic(new MapPoint(evaluationpoint.Latitute, evaluationpoint.Longitute)),  
  565.                         Symbol = textSymbol  
  566.                     };  
  567.                     graphicslayer.Graphics.Add(graphicText);  
  568.                 }  
  569.             }  
  570.             #endregion  
  571.         }  
  572.     }  
  573. }  


显示效果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值