这两天替别人写一个三维校园的展示程序。用的是SceneControl二次开发。

须要利用DOM和TIN构建三维地形。如今说下依据高程点生成TIN的过程:

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

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

高程点数据格式例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2lzZXJfd2h1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

操作界面例如以下:

生成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

最新文章

  1. 掀起你的盖头来:Unit Of Work-工作单元
  2. SQL Server删除distribution数据库
  3. [poj2247] Humble Numbers (DP水题)
  4. MySQL:基础—数据分组
  5. CSS SANS – 神奇!使用 CSS3 创建的字体
  6. iOS app性能优化的那些事
  7. HDU 1044
  8. 破解简单Mifare射频卡密钥杂记
  9. string和byte[]的转换 (C#)
  10. excel_VB宏脚本_批量生成点餐宝接受的格式
  11. hdu1524博弈SG
  12. Archlinux下i3wm与urxvt的配置
  13. base64图片存储
  14. 【原创】大叔经验分享(4)Yarn ResourceManager页面如何实现主被自动切换
  15. 关于AVL树的思考
  16. 05 详解C# 迭代器
  17. ASP.NET Razor 简介
  18. (文档)Shader.Find (在编译时,只包含那些使用中的shader或位置在&quot;Resources&quot;文件夹中shader)
  19. forget word out2
  20. php7---redis

热门文章

  1. 【Django】MEDIA的配置及用法
  2. python学习日记-180823
  3. 抓包神器Fiddler之Https请求随心转
  4. 使WordPress改域名后网站正常运行的方法
  5. Fragment-按返回键程序退出
  6. JS 图片大小自动调整 (img)
  7. Android学习笔记之详细讲解画圆角图片
  8. Spark MLlib架构解析(含分类算法、回归算法、聚类算法和协同过滤)
  9. JSTL之C标签学习
  10. natapp解决Invalid Host header的问题