免费视频|新人指南|投诉删帖|广告合作|地信网APP下载

查看: 4694|回复: 3
收起左侧

[求助] ArcGIS API for Silverlight调用GP生成等值线输入要素集FeatureSet问题

[复制链接]

2

主题

133

铜板

2

好友

技术员

Rank: 3Rank: 3

积分
41
发表于 2012-9-2 10:13 | 显示全部楼层 |阅读模式
已经建立好GP模型,模拟可以生成等值线,现在在Silverlight客户端调用该GP工具时,提供模型输入参数要素集FeatureSet,但是输入参数中的Fields始终为null值,最终导致模型调用失败,无任何输出。

主要代码如下:
  private FeatureSet featureSet;//作为GP输入参数的要素集

        public MainPage2()
        {
            InitializeComponent();

            getXQYJInfoSoapClient client = new getXQYJInfoSoapClient();
            client.GetAllSHRainCompleted += new EventHandler<GetAllSHRainCompletedEventArgs>(client_GetAllSHRainCompleted);
            client.GetAllSHRainAsync();
        }

        void client_GetAllSHRainCompleted(object sender, GetAllSHRainCompletedEventArgs e)
        {
            //获取到所有的山洪雨量点
            ObservableCollection<RainFall> lists = e.Result;
            int PointsNum = lists.Count;//点的个数
            evaluatePoints = new EvaluationPointStruct[PointsNum];
            int index = 0;
            foreach (RainFall item in lists)
            {
                evaluatePoints[index].Latitute = item.Latitute;
                evaluatePoints[index].Longitute = item.Longitute;
                evaluatePoints[index].YL = item.YL24;
                index++;
            }
            Utility.AddPointToMapLayer(myMap, evaluatePoints, out featureSet);
            AccessGPService(featureSet);
        }

        private void AccessGPService(FeatureSet featureset)
        {
            HttpWebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
            _ContourTask = new Geoprocessor("GP服务地址");
            List<GPParameter> parameters = new List<GPParameter>();
            parameters.Add(new GPFeatureRecordSetLayer("RainPoint", featureset)); //这里的featureSet的Fields为null值,就是输入参数没有模型中的字段,请问是怎么回事呢?
            parameters.Add(new GPDouble("Contour_interval", 5));
            _ContourTask.UpdateDelay = 10000;
            _ContourTask.OutputSpatialReference = myMap.SpatialReference; //设置输出空间参考系
            _ContourTask.JobCompleted += new EventHandler<JobInfoEventArgs>(geoprocessorTask_JobCompleted);
            _ContourTask.Failed += new EventHandler<TaskFailedEventArgs>(geoprocessorTask_Failed);
            _ContourTask.SubmitJobAsync(parameters);
        }

        /********************************事件处理程序段***********************************/

        void geoprocessorTask_JobCompleted(object sender, JobInfoEventArgs e)
        {
            Geoprocessor gp = sender as Geoprocessor;
            //注册前缀
            HttpWebRequest.RegisterPrefix("http://", System.Net.Browser.WebRequestCreator.ClientHttp);
            gp.GetResultDataCompleted += new EventHandler<GPParameterEventArgs>(gp_GetResultDataCompleted);
            gp.GetResultDataAsync(e.JobInfo.JobId, "Contour_Kriging_Clip");
        }

        void gp_GetResultDataCompleted(object sender, GPParameterEventArgs e)
        {
            //找到显示等值线图层并清空,然后再次加载
            GraphicsLayer layer = myMap.Layers["GraphicsDZX"] as GraphicsLayer;
            layer.ClearGraphics();
            GPFeatureRecordSetLayer gplayer = e.Parameter as GPFeatureRecordSetLayer;
            MessageBox.Show("结果图层个数:" + gplayer.FeatureSet.Features.Count.ToString()); //这里的gplayer.FeatureSet为null值,错误就出现在这里
            foreach (Graphic graphic in gplayer.FeatureSet.Features)
            {
                graphic.Symbol = new ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol()
                {
                    Style = ESRI.ArcGIS.Client.Symbols.SimpleLineSymbol.LineStyle.Solid,
                    Color = new SolidColorBrush(Colors.Blue),
                    Width = 3
                };
                layer.Graphics.Add(graphic);
            }
        }

        void geoprocessorTask_Failed(object sender, TaskFailedEventArgs e)
        {
            MessageBox.Show(e.Error.ToString());
        }

        //分类渲染
        public Symbol getSymbol(Graphic graphic)
        {
            //线符号
            SimpleLineSymbol symbol = new SimpleLineSymbol();
            double yl = double.Parse(graphic.Attributes["YL"].ToString());
            if (yl > 10)
            {
                symbol.Color = new SolidColorBrush(Colors.Red);
            }
            else
            {
                symbol.Color = new SolidColorBrush(Colors.Blue);
            }
            return symbol;
        }

调用的Utility.cs类代码如下:

    public class Utility
    {
        public static void AddPointToMapLayer(ESRI.ArcGIS.Client.Map map, MainPage2.EvaluationPointStruct[] evaluatePoints, out  ESRI.ArcGIS.Client.Tasks.FeatureSet featureset)
        {
            ESRI.ArcGIS.Client.Projection.WebMercator mercator = new ESRI.ArcGIS.Client.Projection.WebMercator();

            #region 动态添加预测点图层

            if (map.Layers["YLPointsLayer"] != null)
            {
                map.Layers.Remove(map.Layers["YLPointsLayer"]);
            }

            GraphicsLayer graphicslayer = new GraphicsLayer()
            {
                ID = "YLPointsLayer",
            };

            map.Layers.Add(graphicslayer);

            #endregion

            #region 将网格划分点添加到图层中

            GraphicCollection graphicCollection = new GraphicCollection();
            foreach (MainPage2.EvaluationPointStruct evaluationpoint in evaluatePoints)
            {
                Graphic g = new Graphic()
                {
                    Geometry = mercator.FromGeographic(new MapPoint(evaluationpoint.Latitute, evaluationpoint.Longitute)),
                    Symbol = new ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol()
                    {
                        Style = ESRI.ArcGIS.Client.Symbols.SimpleMarkerSymbol.SimpleMarkerStyle.Circle,
                        Size = 9,
                        Color = new SolidColorBrush(Colors.Red)
                    }
                };
                g.Attributes.Add("OBJECTID", "");
                g.Attributes.Add("SHAPE", "Point");
                g.Attributes.Add("YL", evaluationpoint.YL);
                graphicCollection.Add(g);
                graphicslayer.Graphics.Add(g);
            }
            featureset = new FeatureSet(graphicCollection);

            #endregion
        }
    }

2

主题

133

铜板

2

好友

技术员

Rank: 3Rank: 3

积分
41
 楼主| 发表于 2012-9-3 15:30 | 显示全部楼层
问题已经解决,主要还是模型中工作空间问题,导致失败造成的,这样的代码没问题,关于模型建立已经发布在CSDN博客上,地址:
http://blog.csdn.net/taomanman/article/details/7937391
回复 支持 反对

使用道具 举报

0

主题

243

铜板

0

好友

技术员

Rank: 3Rank: 3

积分
78
QQ
发表于 2013-1-15 16:40 | 显示全部楼层
版主厉害    很羡慕
回复 支持 反对

使用道具 举报

0

主题

2230

铜板

15

好友

地信院士

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

积分
2033
发表于 2021-6-22 18:16 | 显示全部楼层
感谢分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

在线客服
快速回复 返回顶部 返回列表