ArcEngine由点生成TIN

这两天替别人写一个三维校园的展示程序,用的是SceneControl二次开发。需要利用DOM和TIN构建三维地形。现在说下根据高程点生成TIN的过程:

(1)根据高程点文件(Excel)生成点shapefile

(2)使用ITinEdit的AddFromFeatureClass方法生成TIN

高程点数据格式如下:

操作界面如下:

生成TIN效果图:

代码很容易理解,如下:

   #region 创建TIN
        private void button_ok_Click(object sender , EventArgs e)
        {
            try
            {
                strTinName=textBox_TINName.Text;
                outFolder=textBox_outpath.Text;
                if (strTinName=="")
                {
                    MessageBox.Show("请输入TIN名称!");
                }
                else if (outFolder=="")
                {
                    MessageBox.Show("请选择TIN保存路径");
                }
                else
                {
                    //生成点shape
                    Excel2Shape excel2shape = new Excel2Shape(textBox_point.Text);
                    excel2shape.CreateShapeFromExcel();

                    //获取shapefile
                    string path = excel2shape.path;
                    string name = excel2shape.name;

                    IWorkspaceFactory pWSFac = new ShapefileWorkspaceFactoryClass();
                    IFeatureWorkspace pFeatureWS = pWSFac.OpenFromFile(path , 0) as IFeatureWorkspace;
                    IFeatureClass pFeatureClass = pFeatureWS.OpenFeatureClass(name);
                    IField pField = pFeatureClass.Fields.get_Field(pFeatureClass.FindField("Z"));
                    //创建TIN
                    ITin pTin = Create_TIN(pFeatureClass , pField , outFolder);
                    ITinLayer pTinlayer = new TinLayerClass();
                    pTinlayer.Dataset = pTin;
                    pTinlayer.Name = strTinName;

                    pSceneControl.SceneGraph.Scene.AddLayer(pTinlayer as ILayer , true);

                    this.Close();
                }

            }
            catch (System.Exception ex)
            {
                MessageBox.Show(ex.Message + "创建TIN失败!");
            }

        }
        /// <summary>
        /// 创建TIN
        /// </summary>
        /// <param name="pFeatureClass">点要素类</param>
        /// <param name="pField">Z字段</param>
        /// <param name="pPath">路径</param>
        public ITin Create_TIN(IFeatureClass pFeatureClass , IField pField , string pPath)
        {
            IGeoDataset pGeoDataset = pFeatureClass as IGeoDataset;
            ITinEdit pTinEdit = new TinClass();
            pTinEdit.InitNew(pGeoDataset.Extent);
            object pObj = Type.Missing;

            pTinEdit.AddFromFeatureClass(pFeatureClass , null , pField , null ,
            esriTinSurfaceType.esriTinMassPoint , ref pObj);
            if (System.IO.File.Exists(pPath))
            {
                _3DCampus.helper.FolderHelper.DeleteFolder(pPath);
            }
            pTinEdit.SaveAs(pPath , ref pObj);
            pTinEdit.Refresh();
            return pTinEdit as ITin;

        }
        #endregion

ArcEngine由点生成TIN

时间: 2024-12-07 13:57:21

ArcEngine由点生成TIN的相关文章

C# arcengine 由FeatureClass生成TIN

IFields pFields = m_FeatureClass.Fields;            int index = pFields.FindField(m_strHeight);            if (index == -1) return;            IField pField = pFields.get_Field(index); IGeoDataset pGeoDataset = m_FeatureClass as IGeoDataset;         

【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.AddFromF

在AcGIS中用大数据生成DEM

在ArcGIS中生成DEM时,采用的数据源往往是一些高程点.等高线,这些高程点.等高线比较密集,可能有好几千万个,甚至上亿个高程点.等高线.若利用这些矢量数据生成TIN,一般是不能实现的,因为生成TIN时,支持的最大结点数只能有几千万个(依据电脑性能,受限于内存).另外矢量信息的存储也是比较讲究的,如果把这些矢量信息存储在shp文件中,往往会出现问题(比如在arcmap中加载时出现的绘制错误).综合以上问题,感觉采用如下办法比较可取. 1. 矢量信息存储在Geodatabase中 把矢量信息用统

散点生成三角网

%例一:二维三角网TIN模型的生成 X=rand(10,2)*5; dt=DelaunayTri(X(:,1),X(:,2));       %生成三角网 triplot(dt);hold on;                 %绘图 scatter(X(:,1),X(:,2),'o'),hold off  %将结点展示出来(散点) %例二:三维TIN的生成(由规则点生成) [x,y]=meshgrid(1:15,1:15);z=peaks(15); tri=delaunay(x,y);   

AE+SceneControl源码共享

最近,有博友发私信或留言交流,先把之前用SceneControl代做的一个小工程共享,做的很粗糙,希望可以帮到大家,欢迎留言交流哈. 除了基本的打开.保存.数据加载.查询等,主要实现以下几个功能: 1.根据高程点(excel文件)生成TIN. 2.TIN与DOM叠加构建三维场景. 3.根据TIN提取等高线. 4.模型导入 下载地址见:http://download.csdn.net/detail/liushuo_whu/7793889 AE+SceneControl源码共享,布布扣,bubuko

GIS基础软件及操作(七)

原文 GIS基础软件及操作(七) 练习七.地形分析 地形分析:TIN及DEM的生成及应用 加深对TIN建立过程的原理.方法的认识: 熟练掌握ArcGIS中建立DEM.TIN的技术方法: 结合实际,掌握应用DEM解决地学空间分析问题的能力. 1. TIN 及DEM 生成 矢量数据: 高程点Elevpt_Clip.shp 高程Elev_Clip.shp 边界Boundary.shp 洱海Erhai.shp 本章的大部分练习都会用到三维分析扩展模块,要使用“三维分析模块”首先在ArcMap中执行菜单命

实现高程点到等高线的转换

一.在ArcMAP中操作实现 1.启动ArcCatalog,新建数据库data.mdb,在空白处右击,导入data.txt,四个字段分别为Code(设为主健).X.Y.Z,保存为表Point. 2.启动ArcMap,Tools→Add XY Data,在“Choose a table”中添加数据库data.mdb 中点已被展绘 3.Tools→Extensions,把3D Analyst 打上勾,Close.右击工具栏,把3D Analyst 打上勾. 4.3D Analyst→Create→M

ArcGIS快速制图插件介绍

ArcGIS快速制图插件介绍 By 李远祥 作品背景 <快速制图插件增强版>在原有的<快速制图插件>基础上,加入植被乱序填充.生成立体楼快.等高线增强显示.一键导出地图和数据.一键点优化显示等功能,尽可能的封装一些复杂操作,利用简单的界面达到高质量的制图显示效果.此版本为比较完整版本,因此也加入插件加密功能. <快速制图插件>的第一个版本是在多次的数字城市.智慧城市及其他的省市级GIS应用中萌生出来的.由于这类型项目的用户数量较多,为了提升其地图的访问效率,一般会采用切

利用Google Earth制作DEM

下载DEM数据:http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp 一般情况在上面的网址即可下载对应区域的DEM文件,然而数据比较老了,可能没有沿海的数据(如填海新建的陆地). 自己制作DEM,需要下载取点工具: http://download.csdn.net/detail/zhudahai1984/4507355 然后按照说明取好点(一定要打开Google Earth),导出对应的点及其高程,比如: 打开arcGIS,添加x,y数据,然后转化