Imports System.IO
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.SystemUI
Imports ESRI.ArcGIS.ADF
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.DataSourcesFile
Public Class CreateTIN
Inherits Windows.Forms.Form
Private strFileName As String
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pFeatureWorkspace As IFeatureWorkspace
Dim pFeatureClass As IFeatureClass
Dim pFeatureLayer As IFeatureLayer
Dim m_selHIndex As Integer = 0
Dim m_selTIndex As Integer = 0
Private Sub btnInput_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnInput.Click
AddShapefile()
'将获得的SHP文件全名显示在txtInput中
txtInput.AppendText(pFeatureLayer.Name)
'将 pFeatureWorkspace 的所有字段添加到COMBOX控件列表中
cboHeightField.Refresh()
Dim lFieldCount As Long
Dim pFClassPointFields As IFields
If pFeatureClass Is Nothing Then
Exit Sub
End If
pFClassPointFields = pFeatureClass.Fields
lFieldCount = pFClassPointFields.FieldCount
Dim n As Integer
For n = 0 To lFieldCount - 1
Dim pname As String
Dim pField As IField
pField = pFClassPointFields.Field(n)
pname = pField.Name
Dim ppname As String = pname
cboHeightField.Items.Add(ppname)
Next
cboHeightField.Refresh()
End Sub
Private Sub cboHeightField_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboHeightField.SelectionChangeCommitted
m_selHIndex = cboHeightField.SelectedIndex
End Sub
Private Sub cboTriangu_SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboTriangu.SelectionChangeCommitted
m_selTIndex = cboTriangu.SelectedIndex
End Sub
Private Sub btnOk_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnOk.Click
CreateTinFromFeature()
End Sub
Private Sub AddShapefile()
'获取当前路径和文件名
Dim dlg As OpenFileDialog
Dim fileName As String
Dim filepath As String
dlg = New OpenFileDialog
dlg.Filter = "Shape(*.shp)|*.shp|all files(*.*)|*.*"
dlg.InitialDirectory = "D:\"
dlg.Title = "打开Shapefile数据"
dlg.Multiselect = True
dlg.ShowDialog()
Dim strFullPath As String = dlg.FileName
If strFullPath Is Nothing Then
Exit Sub
End If
Dim Index As Integer = strFullPath.LastIndexOf("\")
If Index <= 0 Then
Exit Sub
Else
filepath = strFullPath.Substring(0, Index)
fileName = strFullPath.Substring(Index + 1)
End If
'打开工作空间并添加shp文件
pWorkspaceFactory = New ShapefileWorkspaceFactory()
pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(filepath, 0)
pFeatureLayer = New FeatureLayerClass()
pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName)
pFeatureLayer.FeatureClass = pFeatureClass
pFeatureLayer.Name = pFeatureLayer.FeatureClass.AliasName
End Sub
Private Sub CreateTinFromFeature()
Dim pGeoDataset As IGeoDataset
pGeoDataset = pFeatureClass
Dim pExtent As IEnvelope
pExtent = pGeoDataset.Extent()
'TIN将使用通过pExtent设置的空间引用
pExtent.SpatialReference = pGeoDataset.SpatialReference
'获得高程字段
Dim pfields As IFields
pfields = pFeatureClass.Fields
Dim pHeightField As IField
pHeightField = pfields.Field(m_selHIndex)
'创建TIN对象并且得到ITinEdit接口
Dim pTinEdit As ITinEdit = New Tin
'初始化TIN
pTinEdit.InitNew(pExtent)
'调用相应的函数将shape文件(含高程信息)增加到TIN中
If m_selTIndex = 0 Then
pTinEdit.AddFromFeatureClass(pFeatureClass, Nothing, pHeightField, Nothing, esriTinSurfaceType.esriTinMassPoint)
ElseIf m_selTIndex = 1 Then
pTinEdit.AddFromFeatureClass(pFeatureClass, Nothing, pHeightField, Nothing, esriTinSurfaceType.esriTinHardLine)
ElseIf m_selTIndex = 2 Then
pTinEdit.AddFromFeatureClass(pFeatureClass, Nothing, pHeightField, Nothing, esriTinSurfaceType.esriTinSoftLine)
Else
MessageBox.Show("创建TIN失败!")
Me.Close()
End If
'保存TIN
pTinEdit.SaveAs(SaveFileDialog1.FileName)
pTinEdit.StopEditing(False)
Me.Close()
End Sub
Private Sub btnCancel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
Private Sub btnSaveAs_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSaveAs.Click
'另存为
With SaveFileDialog1
.DefaultExt = ""
.FileName = strFileName
.Filter = "All files(*.*)|*.*"
.FilterIndex = 1
.InitialDirectory = "d:"
.OverwritePrompt = True
.Title = "Save File Dialog"
End With
SaveFileDialog1.ShowDialog()
'将生成的TIN文件全名显示在txtOutput中
txtOutput.AppendText(SaveFileDialog1.FileName)
End Sub
End Class