ArcEngine+C#  TIN相关三维功能模块介绍(四)

功能综合演示

 

作者:刘志远

PDF浏览  示例程序下载

                                                

 

 

1.简介

       本篇打算对TIN的介绍做个小结,把前面将的功能都集中到一个小程序中。除了前面将的功能外,本篇还添加了如下一些功能。只要有数据,这些功能都是可以单独使用的,方便读者根据具体的需要直接参考相应代码。

Ø         由矢量点或线数据,通过核函数密度制图方法生成栅格数据(类DEM);

Ø         按给定间距,从栅格数据(DEM)中提取矢量等高线数据;

Ø         由栅格数据(DEM)生成TIN模型;

Ø         动态变化DEMTIN的渲染样式;

Ø         矢量图层叠加到TIN模型;

       本文主要对这几个功能进行简单的讲解,希望对接触TIN的朋友有所帮助。具体的实现,可以参看程序中相应的代码。同时,在压缩包中有个简短的“使用说明”,可以通过该程序尝试讲过的功能。

 

       通常情况下,我们通过对高程点数据进行插值操作(如反距离权插值、样条插值、克里金插值等)生成DEM(数字高程模型)栅格数据,生成的栅格数据的像元灰度值即代表对应的高程值。

       本文介绍的是密度制图,生成的栅格灰度值代表密度大小,所以这里成为“类DEM”。密度制图有核函数密度制图(Kernal)和简单密度制图(Simple)两种方法,本文用的是Kernal方法。对于二次开发来说,由矢量数据生成栅格数据,不论是DEM也好,还是密度制图,只是调用相应接口的某个方法而已,内部的具体操作都是封装好的,程序员只需根据实际需要进行选择即可。这也体现了面向对象的巨大优势。主要代码如下:

 

ArcEngine+C#  TIN相关三维功能模块介绍(四)ArcEngine+C#  TIN相关三维功能模块介绍(四)代码
 1

 

 

3.DEM提取等高线

       根据指定间隔,从DEM栅格数据中提取等高线数据。主要用了ISurfaceOp接口下的Contour()方法。主要代码如下:

 

ArcEngine+C#  TIN相关三维功能模块介绍(四)ArcEngine+C#  TIN相关三维功能模块介绍(四)代码
1ArcEngine+C#  TIN相关三维功能模块介绍(四)    ISurfaceOp pSurfaceOP = new RasterSurfaceOpClass();
2ArcEngine+C#  TIN相关三维功能模块介绍(四)    IFeatureLayer pFL = new FeatureLayerClass(); 
3ArcEngine+C#  TIN相关三维功能模块介绍(四)    object Missing = Type.Missing;
4ArcEngine+C#  TIN相关三维功能模块介绍(四)    pFL.FeatureClass = pSurfaceOP.Contour(iRaster as IGeoDataset, interval, ref Missing) as IFeatureClass;
5ArcEngine+C#  TIN相关三维功能模块介绍(四)

 

 

4.DEM生成TIN

 

 

ArcEngine+C#  TIN相关三维功能模块介绍(四)ArcEngine+C#  TIN相关三维功能模块介绍(四)代码
  1ArcEngine+C#  TIN相关三维功能模块介绍(四)               //***************生成TIN模型*********************************************
  2ArcEngine+C#  TIN相关三维功能模块介绍(四)                IGeoDataset pGeoData = iRaster as IGeoDataset;
  3ArcEngine+C#  TIN相关三维功能模块介绍(四)                IEnvelope pExtent = pGeoData.Extent;
  4ArcEngine+C#  TIN相关三维功能模块介绍(四)                IRasterBandCollection pRasBC = iRaster as IRasterBandCollection;
  5ArcEngine+C#  TIN相关三维功能模块介绍(四)                IRasterBand pRasBand = pRasBC.Item(0);
  6ArcEngine+C#  TIN相关三维功能模块介绍(四)                IRawPixels pRawPixels = pRasBand as IRawPixels;
  7ArcEngine+C#  TIN相关三维功能模块介绍(四)                IRasterProps pProps = pRawPixels as IRasterProps;
  8ArcEngine+C#  TIN相关三维功能模块介绍(四)
  9ArcEngine+C#  TIN相关三维功能模块介绍(四)                int iWid = pProps.Width;
 10ArcEngine+C#  TIN相关三维功能模块介绍(四)                int iHei = pProps.Height;
 11ArcEngine+C#  TIN相关三维功能模块介绍(四)
 12ArcEngine+C#  TIN相关三维功能模块介绍(四)                double w = iWid / 1000.0f;
 13ArcEngine+C#  TIN相关三维功能模块介绍(四)                double h = iHei / 1000.0f;
 14ArcEngine+C#  TIN相关三维功能模块介绍(四)
 15ArcEngine+C#  TIN相关三维功能模块介绍(四)                IPnt pBlockSize = new DblPntClass();
 16ArcEngine+C#  TIN相关三维功能模块介绍(四)                bool IterationFlag;
 17ArcEngine+C#  TIN相关三维功能模块介绍(四)
 18ArcEngine+C#  TIN相关三维功能模块介绍(四)                if (w < 1 && h < 1//横纵都小于1000个像素
 19

 

 

5.动态变化DEMTIN的渲染样式

       动态变化DEMTIN的渲染样式其实是根据用户的设定重新生成对应的渲染样式而已,这里就不贴代码了,具体的可以参考程序。

 

6.矢量图层叠加到TIN模型

       矢量图层叠加到TIN模型,其实是改变图层的属性,将图层中对应的ILayerExtensions接口变为I3DProperties接口,然后将I3DProperties. BaseSurface属性设为TIN图层表面数据。具体代码如下:

 

ArcEngine+C#  TIN相关三维功能模块介绍(四)ArcEngine+C#  TIN相关三维功能模块介绍(四)代码
 1

 

 

7.总结

       至此,关于TIN的一些介绍就到这告一段落,文中没有阐述清楚的部分可以参看程序中的代码。当然,其中不足之处还请各位留言批评指正。

 

相关文章: