【AO笔记】有关TIN数据集的常用介绍

写论文查了很多TIN的接口和属性,特此来记录一下。

转载请注明出处:博客园@秋意正寒,B站同名。

未完待续

1. Tin数据集在ArcGIS中的描述

Tin数据集在磁盘中,被ArcGIS以文件夹形式管理。Tin数据集比较特殊,点、线、三角面根据一定拓扑关系组成,与栅格数据集(一张影像)、一个Shapefile平级。暂且不管其在代码层结构如何,总之,它就在硬盘里长得跟普通的文件夹是一样的,并且奇怪的是,其命名只支持小写(在ArcMap中)。

// 补充一下,超图、MapGIS、QGIS等软件不知道对Tin数据的组织如何,但是除却公认的一些矢量格式(dwg、shp等)和一些公认的栅格格式(tif等),用文件夹组织高级别的数据集是一种折中的解决方案,当然,我本人尚未查阅OGC标准...

2. Tin数据集在ArcObjects中的描述

有关数据和数据库的部分,当然是Geodatabase类库了。

Tin数据集在AO中由Tin类(或TinClass类)组织,由ITinWorkspace接口打开现有Tin数据集(但是创建却不是这个东西创建,与IFeatureWorkspace不同)。

3. AO/AE中Tin数据集的常用接口

  • IWorkspaceFactory 
  • ITinWorkspace
  • ITin、ITinEdit、ITinSurface及升级接口、ITinAdvanced及升级接口
  • ITinNode、ITinTriangle、ITinEdge
  • ITinFeatureEdit

以下逐一进行简单介绍。

4. 一些案例

4.1 打开Tin

IWorkspaceFactory workspaceFactory = new TinWorkspaceFactoryClass();
// 工作空间工厂的OpenFromFile()方法的第一个参数需要注意,如果是gdb则具体写到gdb的全名
ITinWorkspace tinWorkspace = workspaceFactory.OpenFromFile(@"Tin数据集所在的文件夹", 0) as ITinWorkspace;
ITin tin = tinWorkspace.OpenTin("Tin数据集的名称");

4.2 创建Tin数据集

ITin tin = new TinClass();
ITinEdit tinEdit = tin as ITinEdit;
// 用IEnvelope初始化,此步必须,否则抛异常
tinEdit.InitNew(IEnvelope变量);
// 如果需要加入数据或赋予空间参考,请使用以下注释的代码
// tinEdit.Add*(); // 此处代表7个添加数据源的方法
// tinEdit.Refresh();
tinEdit.SaveAs(@"包括Tin名称的路径,名称全英文小写为佳", true);

7个添加数据源的方法详见参考文档,此处截图

  • 第一个方法添加一个IFeatureClass以生成Tin,可以是点线面要素;
  • 第二个方法添加一个IFeatureCursor,使用IFeatureClass.Search()返回的查询型指针即可。
  • 第三个不知道,可以不管;
  • 第四个添加有Z字段的IPoint,测试中发现此方法不稳定;
  • 第五个添加IGeometry,需要指定Z字段;
  • 第六个添加有Z字段的IGeometry;
  • 第七个不知道,可以不管;

七种方法中,第一、第二种方法最稳定,但是参数比较复杂;第四、五、六种方法较为简洁,可以用于局部刷新时使用。

4.3 更新Tin

主要是使用ITinEdit.Refresh()和Save()方法。

// ITin转ITinEdit
public void FreshTin(ITin tin){
    ITinEdit tinEdit = tin as ITinEdit;
    tinEdit.Refresh(); //Tin重新构网
    tinEdit.Save(); //Tin在硬盘上的数据更新
}

4.4 Tin数据集有关信息读取

主要使用ITin接口与IGeoDataset接口。

ITin接口可以获取Tin数据集的描述信息,例如顶点数、三角形数、边数等

4.5 Tin数据集高级操作

主要使用ITinAdvanced、ITinSurface接口。

4.6 其他(编辑等)

 

posted @ 2018-04-28 21:46  四季留歌  阅读(1181)  评论(0编辑  收藏  举报