AO例子生成TIN
Posted 秋意正寒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\\Code\\My"); }
我在Addins的浮动窗上弄了这么一个按钮:
以上是这个按钮的点击事件:在D盘的Code文件夹下生成名称为My的Tin数据集(结果并没有大写,只生成了tin数据集,形状是文件夹)。
其中TOOL是我写的工具类,里面的CreateTin()方法是文章开头的方法。TOOL类已经被实例化了。
这个按钮是测试用的,没有写严密的逻辑判断,要求事先加载一个点或者线图层并且其高程字段的名称必须是“Z”。路径也写死了。
测试结果是成功的,并不比用工具箱慢多少。
闲聊
其实传入IFeatureLayer也可以,通过IFeatureLayer接口的FeatureClass属性亦可访问到IFeatureClass,Layer在Carto类库下主管显示,FeatureClass在Geodatabase类库下主管存储管理数据,没毛病。
以上是关于AO例子生成TIN的主要内容,如果未能解决你的问题,请参考以下文章