C#+ArcEngine:shp矢量点转Tin(VS2010窗体+代码)
2017-08-24 13:06
337 查看
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();
xjShpFil
4000
eDialogshp.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;
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见:点击打开链接
相关文章推荐
- C#+ArcEngine:加载打开Shp矢量数据和栅格数据(VS2010窗体+代码)
- C#+ArcEngine:加载打开 Tin 数据(VS2010窗体+代码)
- C#+ArcEngine:加载打开CAD数据(VS2010窗体+代码)
- C#+ArcEngine:txt点数据转Shp矢量数据
- C#:TXT文件读写(VS2010窗体+代码)
- C#:C#与libLAS的简单操作(VS2010窗体+代码)
- C#实现窗体截图(代码+效果)
- C#中无边框窗体随意移动代码
- 利用DockPanel与C#制作窗体浮动和停靠(vs2010)
- C#窗体支持多个文件拖放的代码实现
- C#不用ArcEngine,生成Shp文件(三)---------生成.shp格式文件
- C#不用ArcEngine,生成Shp文件(四)---------生成.dbf文件
- C#WinForm4张纸牌窗体设计补充后续Point类代码
- C#遍历窗体控件代码,遍历窗体所有按钮控件代码
- 在winfrom下利用c#代码,实现kindEditor的JavaScript方法:editor.html(),实现上报窗体的自动提交。
- asp.net 中为什么在showModalDialog弹出的窗体 用html 控件 刷新不了页面。而用服务器端控件 写C#代码可以刷新页面。但是用服务器端刷新页面不好。
- C#中ListView控件实现窗体代码
- C#鼠标拖动窗体代码
- C# 窗体淡入淡出效果的实例代码
- C#调用域账户登录窗体代码