ArcEngine由点生成TIN
2016-01-06 09:07
288 查看
这两天替别人写一个三维校园的展示程序。用的是SceneControl二次开发。
须要利用DOM和TIN构建三维地形。如今说下依据高程点生成TIN的过程:
(1)依据高程点文件(Excel)生成点shapefile
(2)使用ITinEdit的AddFromFeatureClass方法生成TIN
高程点数据格式例如以下:
操作界面例如以下:
:
生成TIN效果图:
代码非常easy理解,例如以下:
须要利用DOM和TIN构建三维地形。如今说下依据高程点生成TIN的过程:
(1)依据高程点文件(Excel)生成点shapefile
(2)使用ITinEdit的AddFromFeatureClass方法生成TIN
高程点数据格式例如以下:
操作界面例如以下:
:
生成TIN效果图:
代码非常easy理解,例如以下:
#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
相关文章推荐
- PHP常用的正则表达式
- android点击事件
- protobuf 实战(2)mac 生成篇
- Android消息通知(notification)和PendingIntent传值
- Cocos2d-x v3.9发布
- 详解c++指针的指针和指针的引用
- js获取多个标签元素的内容,并根据元素的内容修改标签的属性
- openstack api
- Cocos2d-x 3.x中解决无法打开文件:“extensions/ExtensionMacros.h”
- 分线程加载新界面-适用于显示等待动画
- Spring的HttpInvoker
- 基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
- 【iOS开发-图层】自己定义图层的两种方式
- java冒泡排求最大值
- thinkpad x230怎么搞定的ssd的win7的启动顺序
- BeautifulSoup4 UserWarning
- Objective-C语言——UIButton 按钮
- 系统权限控制的见解
- ionic学习笔记4
- UIActionSheet--从相册去出照片进行涂抹,截图保存到相册的demo完成