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.\n即{1}s.\n即{2}min", Convert.ToString(ts2.TotalMilliseconds), Convert.ToString(ts2.TotalMilliseconds / 1000), Convert.ToString(ts2.TotalMilliseconds / 1000 / 60)));      
}

 

posted @ 2019-04-21 22:08  marvelousone  阅读(613)  评论(0编辑  收藏  举报