码迷,mamicode.com
首页 > Windows程序 > 详细

ArcGIS Pro C#二次开发-删除字段

时间:2020-03-11 19:26:00      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:make   add   relay   else   write   二次开发   message   ace   over   

using System;
using System.Collections.Generic;
using System.Linq;
//using System.Windows;
//using System.Windows.Forms;


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using ArcGIS.Desktop.Core.Geoprocessing;

using ArcGIS.Desktop.Framework;

using ArcGIS.Desktop.Framework.Contracts;

using ArcGIS.Desktop.Framework.Dialogs;

using ArcGIS.Desktop.Mapping;

namespace ProAppModule1
{
    internal class Button1 : ArcGIS.Desktop.Framework.Contracts.Button
    {
        string delFieldName = "AddedField";//需要删除的字段
        protected override async void OnClick()

        {

            try

            {

                BasicFeatureLayer layer = null;

                await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    //find selected layer

                    if (MapView.Active.GetSelectedLayers().Count == 0)

                    {

                        MessageBox.Show("Select a feature class from the Content ‘Table of Content‘ first.");

                        return;

                    }

                    layer = MapView.Active.GetSelectedLayers()[0] as BasicFeatureLayer;



                });

                if (layer == null)

                    MessageBox.Show("Unable to find a feature class at the first layer of the active map");

                else

                {

                    var dataSource = await GetDataSource(layer);

                    MessageBox.Show($@"{dataSource} was found .... deleting the newly added field");

                    await

                        ExecuteDeleteFieldTool(layer, delFieldName);

                }

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

            }

        }



        private async Task<string> GetDataSource(BasicFeatureLayer theLayer)

        {

            try

            {

                return await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    var inTable = theLayer.Name;

                    var table = theLayer.GetTable();

                    var dataStore = table.GetDatastore();

                    var workspaceNameDef = dataStore.GetConnectionString();

                    var workspaceName = workspaceNameDef.Split(=)[1];



                    var fullSpec = System.IO.Path.Combine(workspaceName, inTable);

                    return fullSpec;

                });

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

                return string.Empty;

            }

        }



        private async Task<bool> ExecuteDeleteFieldTool(BasicFeatureLayer theLayer, string fieldName)

        {

            try

            {

                return await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>

                {

                    var inTable = theLayer.Name;

                    var table = theLayer.GetTable();

                    var dataStore = table.GetDatastore();

                    var workspaceNameDef = dataStore.GetConnectionString();

                    var workspaceName = workspaceNameDef.Split(=)[1];



                    var fullSpec = System.IO.Path.Combine(workspaceName, inTable);

                    System.Diagnostics.Debug.WriteLine($@"Delete {fieldName} from {fullSpec}");



                    var parameters = Geoprocessing.MakeValueArray(fullSpec, fieldName);

                    var cts = new CancellationTokenSource();

                    var results = Geoprocessing.ExecuteToolAsync("management.DeleteField", parameters, null, cts.Token,

                        (eventName, o) =>

                        {

                            System.Diagnostics.Debug.WriteLine($@"GP event: {eventName}");

                            if (eventName == "OnMessage")

                            {



                                System.Diagnostics.Debug.WriteLine($@"Msg: {o}");

                            }

                        });

                    return true;



                });

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.ToString());

                return false;

            }

        }



    }
}

 

ArcGIS Pro C#二次开发-删除字段

标签:make   add   relay   else   write   二次开发   message   ace   over   

原文地址:https://www.cnblogs.com/gisoracle/p/12464700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!