ArcGIS Runtime 本地API介绍(六)

来源:互联网 发布:淘宝翻新机 编辑:程序博客网 时间:2024/05/21 09:40

本例子使用GPK实现一个缓冲区分析,在地图上单击,以该点作为基点然后根据输入的缓冲距离做缓冲区分析,核心代码如下:

 

namespace ArcGISWpfLgp

{

 

    public partial class MainWindow : Window

    {

         Geoprocessor pGPTask;

 

         public MainWindow()

        {

            InitializeComponent();

 

             //授权

             ArcGISRuntime.SetLicense("许可");

//初始化服务器

             LocalServer.Initialize();

 

 

             //获取本地GP服务

            LocalGeoprocessingService.GetServiceAsync(@"SimpleBuffer.gpk",GPServiceType.Execute, (gpService) =>

            {

                if (gpService.Error !=null)

                {

                    MessageBox.Show(gpService.Error.Message);

                }

                //创建Geoprocessor

                pGPTask = new Geoprocessor(gpService.UrlGeoprocessingService +"/" +

                "SimpleBuffer");

                MyMap.MouseClick +=MyMap_MouseClick;

            });

        }

 

        private void MyMap_MouseClick(objectsender,ESRI.ArcGIS.Client.Map.MouseEventArgse)

        {

            pGPTask.CancelAsync();

            GraphicsLayer pGraphicsLayer = MyMap.Layers["MyGraphicsLayer"]asGraphicsLayer;

            pGraphicsLayer.ClearGraphics();

            e.MapPoint.SpatialReference =MyMap.SpatialReference;

            Graphic graphic = new ESRI.ArcGIS.Client.Graphic()

            {

                Geometry = e.MapPoint,

                Symbol = LayoutRoot.Resources["DefaultClickSymbol"]asESRI.ArcGIS.Client.Symbols.Symbol

            };

            graphic.SetZIndex(1);

            pGraphicsLayer.Graphics.Add(graphic);

 

            //构造GP的参数,2个,一个表示FeatureSet,一个表示缓冲距离

            List<GPParameter>pGParams =newList<GPParameter>();

 

            double pDist = System.Convert.ToDouble(txtBoxDist.Text);

 

            Graphic pGraphic = new Graphic { Geometry = e.MapPoint };

 

            FeatureSet pFeatureSet = new FeatureSet(new List<Graphic> { pGraphic });

 

            pGParams.Add(newGPFeatureRecordSetLayer("InputFeatures",pFeatureSet));

 

            pGParams.Add(newGPLinearUnit("Distance",esriUnits.esriKilometers,pDist));

 

            pGPTask.ExecuteCompleted += (s,e1) =>

            {

                GPExecuteResultsresults =e1.Results;

                GPFeatureRecordSetLayerrs =results.OutParameters[0]asGPFeatureRecordSetLayer;

                Graphic graphicBuff = new ESRI.ArcGIS.Client.Graphic()

                {

                    Geometry =rs.FeatureSet.Features[0].Geometry,

                    Symbol = LayoutRoot.Resources["ResultsFillSymbol"]asESRI.ArcGIS.Client.Symbols.Symbol

                };

                pGraphicsLayer.Graphics.Add(graphicBuff);

            };

            pGPTask.Failed += (s2,e2) =>

            {

                MessageBox.Show(e2.Error.Message);

            };

            pGPTask.ExecuteAsync(pGParams);

        }

 

    }

}

 

原创粉丝点击