C#+ArcEngine:shp矢量点转Tin(VS2010窗体+代码)

分享给有需要的人,代码质量勿喷。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.DataSourcesFile;
using ESRI.ArcGIS.Geodatabase;
using ESRI.ArcGIS.Geometry;
using System.IO;

namespace shp矢量点转Tin
{
    public partial class FormMain : Form
    {
        public FormMain()
        {
            ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.EngineOrDesktop);//重要的一句话
            InitializeComponent();
        }


        //选择shp矢量点文件
        IFeatureClass xjFeatureClass;
        private void 打开txtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.axSceneControl1.Scene.ClearLayers();
            OpenFileDialog xjShpFileDialogshp = new OpenFileDialog();
            xjShpFileDialogshp.Title = "打开矢量点数据";
            xjShpFileDialogshp.Filter = "矢量文件(*.shp)|*.shp";

            if (xjShpFileDialogshp.ShowDialog() == DialogResult.OK)
            {
                string xjShpFileFullPath = xjShpFileDialogshp.FileName;
                shp点文件全路径ToolStripMenuItem.Text = xjShpFileFullPath;
                string xjShpFolder = System.IO.Path.GetDirectoryName(xjShpFileFullPath);
                string xjShpFilename = System.IO.Path.GetFileName(xjShpFileFullPath);

                IWorkspaceFactory xjWsF = new ShapefileWorkspaceFactory();
                IFeatureWorkspace xjFeatureWorkspace = (IFeatureWorkspace)xjWsF.OpenFromFile(xjShpFolder, 0);

                IWorkspace xjws = xjWsF.OpenFromFile(xjShpFolder, 0);
                IFeatureWorkspace xjFWs = xjws as IFeatureWorkspace;
                xjFeatureClass = xjFWs.OpenFeatureClass(xjShpFilename);
                IFeatureLayer xjFeatureLayer = new FeatureLayer();
                xjFeatureLayer.FeatureClass = xjFeatureClass;
                xjFeatureLayer.Name = xjFeatureClass.AliasName;

                ILayer xjShpLayer = xjFeatureLayer as ILayer;
                this.axSceneControl1.Scene.AddLayer(xjShpLayer, false);
            }
        }


        //选择Tin保存路径
        private void 选择Tin保存路径ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SaveFileDialog xjTinSaveDialog = new SaveFileDialog();
            xjTinSaveDialog.Title = "选择TIN文件保存路径";
            xjTinSaveDialog.Filter = "TIN(*.tin)|*.tin";

            if (xjTinSaveDialog.ShowDialog() == DialogResult.OK)
            {
                string xjTINSavepath = xjTinSaveDialog.FileName;
                tin保存路径ToolStripMenuItem.Text = xjTINSavepath;
            }
        }


        //转换并显示Tin
        IGeoDataset xjGeoDataSet;
        IEnvelope xjEnvelopeExtent;
        IFields xjFields;
        IField xjField;
        private void 转换ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //1、创建Tin
            string TinSavePath = tin保存路径ToolStripMenuItem.Text;
            xjGeoDataSet = xjFeatureClass as IGeoDataset;
            xjEnvelopeExtent = new EnvelopeClass();
            xjEnvelopeExtent = xjGeoDataSet.Extent;
            xjFields = xjFeatureClass.Fields;
            xjField = xjFields.get_Field(4);//设置所用字段:height
            ITinEdit xjTinEdit = new TinClass();
            xjTinEdit.InitNew(xjEnvelopeExtent);
            try
            {
                xjTinEdit.AddFromFeatureClass(xjFeatureClass, null, xjField, null, 
                                              esriTinSurfaceType.esriTinMassPoint);
            }
            catch
            {
                MessageBox.Show("创建TIN失败");
            }
            xjTinEdit.SaveAs(TinSavePath);
            xjTinEdit.StopEditing(false);

            //2、加载TIN
            IWorkspaceFactory TinWsF = new TinWorkspaceFactory();
            ITinWorkspace TinWs;
            ITin xjTin;
            ITinLayer TinLayer;
            ILayer xjLayer;
            FileInfo fileinfo = new FileInfo(TinSavePath);
            if (TinWsF.IsWorkspace(fileinfo.DirectoryName))
            {
                TinWs = TinWsF.OpenFromFile(fileinfo.DirectoryName, 0) as ITinWorkspace;
                xjTin = TinWs.OpenTin(fileinfo.Name);
                TinLayer = new TinLayerClass();
                TinLayer.Dataset = xjTin;
                xjLayer = TinLayer as ILayer;
                //显示
                this.axSceneControl1.Scene.AddLayer(xjLayer, true);
                this.axSceneControl1.SceneGraph.RefreshViewers();
            }
        }
    }
}

VS2010+ArcEngine10.1窗体+代码:点击打开链接

VS2012+ArcEngine10.2窗体+代码:点击打开链接

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

累了就要打游戏

把我养胖,搞代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值