zoukankan      html  css  js  c++  java
  • 【AO例子】生成TIN

    当然,通过GP生成也是可以的。这里介绍的是已经烂大街的生成方法。

    上代码:

    public ITin CreateTin(IFeatureClass featureClass, IField Z, string outputPath)
    {
        ITinEdit tinEdit = new TinClass();
        object _ = Type.Missing;
        tinEdit.InitNew((featureClass as IGeoDataset).Extent);
        tinEdit.AddFromFeatureClass(featureClass, null, Z, null, esriTinSurfaceType.esriTinMassPoint, ref _);
        tinEdit.SaveAs(outputPath, ref _);
        tinEdit.Refresh();
    
        return tinEdit as ITin;
    }

    解释:

    • 传入featureClass,这个是地理数据库中的某个要素类。
    • 传入Z,这个是该要素类的高程字段。
    • 传入outputPath,这个是生成的Tin的完整路径。

    ITinEdit是Geodatabase类库下的接口,是TinClass这个类中用于编辑Tin数据集的部分功能。

    这个ITinEdit对象tinEdit做了四件事:初始化、添加要素类、保存、生成(刷新)。

    之所以返回ITin,是为了方便以后对ITin的调用。

    例子

    /// <summary>
    /// 测试生成TIN
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void Btn_CreateTin_Click(object sender, EventArgs e)
    {
        IMap nowMap = (ArcMap.Application.Document as IMxDocument).FocusMap;
        IFeatureClass fc = (nowMap.Layer[0] as IFeatureLayer).FeatureClass;
        IField f = fc.Fields.Field[fc.FindField("Z")];
        TOOL.CreateTin(fc, f, @"D:CodeMy"); 
    }

    我在Addins的浮动窗上弄了这么一个按钮:

    以上是这个按钮的点击事件:在D盘的Code文件夹下生成名称为My的Tin数据集(结果并没有大写,只生成了tin数据集,形状是文件夹)。

    其中TOOL是我写的工具类,里面的CreateTin()方法是文章开头的方法。TOOL类已经被实例化了。

    这个按钮是测试用的,没有写严密的逻辑判断,要求事先加载一个点或者线图层并且其高程字段的名称必须是“Z”。路径也写死了。

    测试结果是成功的,并不比用工具箱慢多少。

    闲聊

    其实传入IFeatureLayer也可以,通过IFeatureLayer接口的FeatureClass属性亦可访问到IFeatureClass,Layer在Carto类库下主管显示,FeatureClass在Geodatabase类库下主管存储管理数据,没毛病。

  • 相关阅读:
    学习vue_01
    练习题 vue_01:
    测试
    django小结
    BBS_02day
    BBS 03day
    力扣(LeetCode)412. Fizz Buzz
    力扣(LeetCode)415. 字符串相加
    力扣(LeetCode)448. 找到所有数组中消失的数字
    力扣(LeetCode)453. 最小移动次数使数组元素相等
  • 原文地址:https://www.cnblogs.com/onsummer/p/8677053.html
Copyright © 2011-2022 走看看