• C#AE调用GP工具生成TIN三角网


    未有特别说明均为原创,转载注明出处。

     网上面这方面资料比较少,ArcGIS官方网站只给了python如何生成Tin,其实可以对比python写法,写出C#版本代码。

    以下是具体代码

    public static void generateTIN_Advance() 
    {
        Stopwatch sw = new Stopwatch();
        sw.Start();
        try
        {
            ILayer pLayer = Property.axMapControl.get_Layer(0);//随便打开生成TIN数据的原文件
            IFeatureLayer pFeaLayer = pLayer as IFeatureLayer;
            string strFeaLayerPath = encryptionAlgorithm.getLayerStorePath(pFeaLayer);
            IWorkspaceFactory pwf = new ShapefileWorkspaceFactory();
            IFeatureWorkspace pfw = pwf.OpenFromFile(strFeaLayerPath, 0) as IFeatureWorkspace;
            IFeatureClass pfc1 = pfw.OpenFeatureClass("XXX.shp");
            IFeatureClass pfc2 = pfw.OpenFeatureClass("XXX2.shp");
            Geoprocessor GP = new Geoprocessor();
            CreateTin createTin = new CreateTin();
            string strCreateTinName = "Tin";         
            if (Directory.Exists(strFeaLayerPath + @"" + strCreateTinName))//如果已经存在 删除已经存在的TIN 
            {
                Directory.Delete(strFeaLayerPath + @"" + strCreateTinName, true);
            }
            else////创建存放TIN的文件夹     
            {
                string parentPath = Directory.GetParent(strFeaLayerPath + @"" + strCreateTinName).FullName;
                if (!Directory.Exists(parentPath))
                {
                    Directory.CreateDirectory(parentPath);
                }
            }     
            //设置输入文件参数
            string height_field = "Shape.Z";
            string SF_type1 = "Mass_Points";//"masspoints"
            string SF_type2 ="Hard_Clip";// "hardclip"
            string tag_value = "<None>";//"" "null"
            //生成GP属性表格对象
            GpValueTableObject gpValueTableObject = new GpValueTableObjectClass();
            //文件obj1 参数设置
            object obj11 = pfc1;//strFeaLayerPath + @"" + pfc1.AliasName + ".shp ";
            object obj12 = height_field;
            object obj13 = SF_type1;
            object obj14 = tag_value;
            //文件obj2 参数设置
            object obj21 = pfc2;//strFeaLayerPath + @"" + pfc2.AliasName + ".shp ";
            object obj22 = height_field;
            object obj23 = SF_type2;
            object obj24 = tag_value;
            //设置GP属性表列数
            gpValueTableObject.SetColumns(4);
            //设置GP属性表行数 同时传入文件
            gpValueTableObject.AddRow(ref obj11);
            gpValueTableObject.AddRow(ref obj21);
            //向GP属性表内填入参数 注意已经设置过每行的第0列 即上步骤中传入的文件
            //gpValueTableObject.SetValue(0, 0, obj11);
            gpValueTableObject.SetValue(0, 1, obj12);
            gpValueTableObject.SetValue(0, 2, obj13);
            gpValueTableObject.SetValue(0, 3, obj14);
            //gpValueTableObject.SetValue(1, 0, obj21);
            //gpValueTableObject.SetValue(1, 1, obj22);
            gpValueTableObject.SetValue(1, 2, obj23);
            gpValueTableObject.SetValue(1, 3, obj24);
            //调用 实例化TIN接口,输入要素为GP属性表,输出要素路径和文件名
            string outTin = strFeaLayerPath + @"" + strCreateTinName;
            //gp.Execute("CreateTin_3d", parameters, null);
            createTin.in_features = gpValueTableObject;
            createTin.out_tin = outTin;
            //执行GP工具,将creatTin放入
            GP.Execute(createTin, null);
            // Wait until the execution completes.
            // while (result.Status == esriJobStatus.esriJobExecuting)
            //     Thread.Sleep(1000);
            // // Wait for 1 second.
            //MessageBox.Show(gp.GetMessages(ref sev));
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        sw.Stop();
        TimeSpan ts2 = sw.Elapsed;
        MessageBox.Show(String.Format("Stopwatch总共花费{0}ms.
    即{1}s.
    即{2}min", Convert.ToString(ts2.TotalMilliseconds), Convert.ToString(ts2.TotalMilliseconds / 1000), Convert.ToString(ts2.TotalMilliseconds / 1000 / 60)));      
    }

  • 相关阅读:
    关于分工协作
    SQL分类后每类随机抽取
    新浪微群抢票
    to learn softwarelist
    大厂程序员教你如何学习C++(内附学习资料)
    干货|大厂程序员来讲一下互联网公司技术面试的流程以及注意事项
    程序员要如何写简历(附简历模板)
    laravel项目拉取下来安装,node.js库安装
    laravelhas方法查看关联关系
    laravel框架少见方法详解
  • 原文地址:https://www.cnblogs.com/marvelousone/p/10747342.html
Copyright © 2020-2023  润新知