仿照ArcCatalog创建一个shapefile
仿照ArcCatalog创建一个shapefile:
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.DataSourcesFile
Imports ESRI.ArcGIS.Geodatabase
Imports ESRI.ArcGIS.CatalogUI


Public Class frmCreateNewShapefileClass frmCreateNewShapefile
Inherits System.Windows.Forms.Form
Dim pSpatialReference As ISpatialReference

Private Sub Button2_Click()Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim ShpName As String
Dim ShpType As String
ShpName = TextBox1.Text
ShpType = ComboBox1.Text
Try
CreateShapeFile("G:\", ShpName, ShpType, pSpatialReference)
Catch ex As Exception
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
End Try
Me.Close()
pSpatialReference = New UnknownCoordinateSystem
End Sub

Private Sub Button1_Click()Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim pDialog As ISpatialReferenceDialog
pDialog = New SpatialReferenceDialog
pSpatialReference = pDialog.DoModalCreate(True, False, False, 0)
If pSpatialReference Is Nothing Then
pSpatialReference = New UnknownCoordinateSystem
Exit Sub
End If
Dim pGeoCoordsys As IGeographicCoordinateSystem
Dim pProjectedcoordSys As IProjectedCoordinateSystem
If CheckBox1.CheckState = False Then
If TypeOf pSpatialReference Is IGeographicCoordinateSystem Then
pGeoCoordsys = pSpatialReference
ListBox1.Items.Clear()
ListBox1.Items.Add("Geographic Coordinate System")
ListBox1.Items.Add("Name:" & pSpatialReference.Name)
End If
If TypeOf pSpatialReference Is IProjectedCoordinateSystem Then
pProjectedcoordSys = pSpatialReference
ListBox1.Items.Clear()
ListBox1.Items.Add("Projected Coordinate System")
ListBox1.Items.Add("Name:" & pSpatialReference.Name)
ListBox1.Items.Add("")
ListBox1.Items.Add("Geographic Coordinate System")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.GeographicCoordinateSystem.Name)
End If
End If
If CheckBox1.CheckState = True Then
If TypeOf pSpatialReference Is IGeographicCoordinateSystem Then
ListBox1.Items.Clear()
pGeoCoordsys = pSpatialReference
ListBox1.Items.Add("Type:Geographic Coordinate System")
ListBox1.Items.Add("Units:" & pGeoCoordsys.CoordinateUnit.Name)
ListBox1.Items.Add("Datum")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.Datum.Name)
ListBox1.Items.Add(" Spheroid")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.Datum.Spheroid.Name)
ListBox1.Items.Add(" Flattening:" & pGeoCoordsys.Datum.Spheroid.Flattening)
ListBox1.Items.Add(" SimiMajorAxis:" & pGeoCoordsys.Datum.Spheroid.SemiMajorAxis)
ListBox1.Items.Add(" SimiMinorAxis:" & pGeoCoordsys.Datum.Spheroid.SemiMinorAxis)
ListBox1.Items.Add("Prime Meridian")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.PrimeMeridian.Name)
ListBox1.Items.Add(" Longitude:" & pGeoCoordsys.PrimeMeridian.Longitude)
ListBox1.Items.Add(" Factory Code: " & pGeoCoordsys.PrimeMeridian.FactoryCode)
ElseIf TypeOf pSpatialReference Is IProjectedCoordinateSystem Then
ListBox1.Items.Clear()
pProjectedcoordSys = pSpatialReference
ListBox1.Items.Add("Type:Projected Coordinate System")
ListBox1.Items.Add("CoordinateUnits")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.CoordinateUnit.Name)
ListBox1.Items.Add(" Factor:" & pProjectedcoordSys.CoordinateUnit.ConversionFactor)
ListBox1.Items.Add("Factory Code:" & pProjectedcoordSys.FactoryCode)
ListBox1.Items.Add("Projection")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.Projection.Name)
ListBox1.Items.Add(" Classification:" & pProjectedcoordSys.Projection.Classification)
ListBox1.Items.Add(" Factory Code:" & pProjectedcoordSys.Projection.FactoryCode)
ListBox1.Items.Add("Factory Code:" & pProjectedcoordSys.FactoryCode)
ListBox1.Items.Add("False Easting:" & pProjectedcoordSys.FalseEasting)
ListBox1.Items.Add("False Northing:" & pProjectedcoordSys.FalseNorthing)
ListBox1.Items.Add("Geographic Coordinate System:")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.GeographicCoordinateSystem.Name)
End If
End If
End Sub

Private Sub CreateShapeFile()Sub CreateShapeFile(ByVal sFilePath As String, ByVal sFileName As String, ByVal sFileType As String, ByVal pSpatialReference As ISpatialReference)
Dim pFeatureWorkspace As IFeatureWorkspace
Dim pWorkspaceFactory As IWorkspaceFactory
Dim pFields As IFields
Dim pField As IField
Dim pFieldsEdit As IFieldsEdit
Dim pFieldEdit As IFieldEdit
Dim pGeometryDef As IGeometryDef
Dim pGeometryDefEdit As IGeometryDefEdit
Dim pFeatClass As IFeatureClass
Dim sShapeFieldName As String
Dim sNewShapeFileName As String
Try
sNewShapeFileName = Dir(sFilePath & sFileName & ".shp")
If (sNewShapeFileName <> "") Then
MessageBox.Show("文件已经存在")
Exit Sub
End If
sShapeFieldName = "Shape"
pWorkspaceFactory = New ShapefileWorkspaceFactory
pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)
pFields = New Fields
pFieldsEdit = pFields
pFieldsEdit.FieldCount_2 = 7
pGeometryDef = New GeometryDef
pGeometryDefEdit = pGeometryDef
Select Case sFileType
Case "Point"
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPoint
Case "Polyline"
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolyline
Case "Polygon"
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryPolygon
Case "MultiPoint"
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryMultipoint
Case "MultiPatch"
pGeometryDefEdit.GeometryType_2 = esriGeometryType.esriGeometryMultiPatch
End Select
pGeometryDefEdit.SpatialReference_2 = pSpatialReference
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Type_2 = esriFieldType.esriFieldTypeGeometry
.GeometryDef_2 = pGeometryDef
.Name_2 = sShapeFieldName
End With
pFieldsEdit.Field_2(0) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Name_2 = "SmallInteger"
.Type_2 = esriFieldType.esriFieldTypeSmallInteger
End With
pFieldsEdit.Field_2(1) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Name_2 = "Integer"
.Type_2 = esriFieldType.esriFieldTypeInteger
End With
pFieldsEdit.Field_2(2) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Name_2 = "Single"
.Type_2 = esriFieldType.esriFieldTypeSingle
End With
pFieldsEdit.Field_2(3) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Precision_2 = 5
.Scale_2 = 5
.Name_2 = "Double"
.Type_2 = esriFieldType.esriFieldTypeDouble
End With
pFieldsEdit.Field_2(4) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Length_2 = 30
.Name_2 = "String"
.Type_2 = esriFieldType.esriFieldTypeString
End With
pFieldsEdit.Field_2(5) = pField
pField = New Field
pFieldEdit = pField
With pFieldEdit
.Name_2 = "Date"
.Type_2 = esriFieldType.esriFieldTypeDate
End With
pFieldsEdit.Field_2(6) = pField
pFeatClass = pFeatureWorkspace.CreateFeatureClass(sFileName, pFields, Nothing, Nothing, esriFeatureType.esriFTSimple, sShapeFieldName, "")
sNewShapeFileName = Dir(sFilePath & "\" & sFileName & ".shp")
' If (sNewShapeFileName <> "") Then
' MessageBox.Show("Build Success")
'Else
'MessageBox.Show("Build Fail")
'End If
Exit Sub
Catch ex As Exception
MessageBox.Show(ex.Message, "异常", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
End Try
End Sub

Private Sub Button3_Click()Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Me.Close()
End Sub


Private Sub frmCreateNewShapefile_Load()Sub frmCreateNewShapefile_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
ListBox1.Items.Clear()
pSpatialReference = New UnknownCoordinateSystem
ListBox1.Items.Add("Unknown Coordinate System")
CheckBox1.Checked = False
End Sub


Private Sub CheckBox1_CheckStateChanged()Sub CheckBox1_CheckStateChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckStateChanged
Dim pGeoCoordsys As IGeographicCoordinateSystem
Dim pProjectedcoordSys As IProjectedCoordinateSystem
Dim dXmin, dXmax, dYmin, dYmax, dMinZ, dMaxZ, dMinM, dmaxM As Double

If pSpatialReference Is Nothing Then
pSpatialReference = New UnknownCoordinateSystem
End If
If pSpatialReference.HasXYPrecision Then
pSpatialReference.GetDomain(dXmin, dXmax, dYmin, dYmax)
End If
If pSpatialReference.HasZPrecision Then
pSpatialReference.GetZDomain(dMinZ, dMaxZ)
End If
If pSpatialReference.HasMPrecision Then
pSpatialReference.GetMDomain(dMinM, dmaxM)
End If
If CheckBox1.Checked = True Then
If TypeOf pSpatialReference Is IGeographicCoordinateSystem Then
ListBox1.Items.Clear()
pGeoCoordsys = pSpatialReference
ListBox1.Items.Add("Geographic Coordinate System")
ListBox1.Items.Add("Name:" & pSpatialReference.Name)
ListBox1.Items.Add("Datum")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.Datum.Name)
ListBox1.Items.Add(" Spheroid")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.Datum.Spheroid.Name)
ListBox1.Items.Add(" Flattening:" & pGeoCoordsys.Datum.Spheroid.Flattening)
ListBox1.Items.Add(" SimiMajorAxis:" & pGeoCoordsys.Datum.Spheroid.SemiMajorAxis)
ListBox1.Items.Add(" SimiMinorAxis:" & pGeoCoordsys.Datum.Spheroid.SemiMinorAxis)
ListBox1.Items.Add("Prime Meridian")
ListBox1.Items.Add(" Name:" & pGeoCoordsys.PrimeMeridian.Name)
ListBox1.Items.Add(" Longitude:" & pGeoCoordsys.PrimeMeridian.Longitude)
ListBox1.Items.Add(" Factory Code: " & pGeoCoordsys.PrimeMeridian.FactoryCode)
ListBox1.Items.Add("")
ListBox1.Items.Add("XY Domain")
ListBox1.Items.Add(" Xmin:" & dXmin)
ListBox1.Items.Add(" Xmax:" & dXmax)
ListBox1.Items.Add(" Ymin:" & dYmin)
ListBox1.Items.Add(" Ymax:" & dYmax)
ListBox1.Items.Add("")
ListBox1.Items.Add("Z domain")
ListBox1.Items.Add(" Zmin:" & dMinZ)
ListBox1.Items.Add(" Zmax:" & dMaxZ)
ListBox1.Items.Add("")
ListBox1.Items.Add("M domain")
ListBox1.Items.Add(" Mmin:" & dMinM)
ListBox1.Items.Add(" Mmax:" & dmaxM)
ElseIf TypeOf pSpatialReference Is IProjectedCoordinateSystem Then
ListBox1.Items.Clear()
pProjectedcoordSys = pSpatialReference
ListBox1.Items.Add("Projected Coordinate System")
ListBox1.Items.Add("Name:" & pSpatialReference.Name)
ListBox1.Items.Add("CoordinateUnits")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.CoordinateUnit.Name)
ListBox1.Items.Add(" Factor:" & pProjectedcoordSys.CoordinateUnit.ConversionFactor)
ListBox1.Items.Add("Factory Code:" & pProjectedcoordSys.FactoryCode)
ListBox1.Items.Add("Projection")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.Projection.Name)
ListBox1.Items.Add(" Classification:" & pProjectedcoordSys.Projection.Classification)
ListBox1.Items.Add(" Factory Code:" & pProjectedcoordSys.Projection.FactoryCode)
ListBox1.Items.Add("Factory Code:" & pProjectedcoordSys.FactoryCode)
ListBox1.Items.Add("False Easting:" & pProjectedcoordSys.FalseEasting)
ListBox1.Items.Add("False Northing:" & pProjectedcoordSys.FalseNorthing)
ListBox1.Items.Add("Geographic Coordinate System:")
ListBox1.Items.Add(" Name:" & pProjectedcoordSys.GeographicCoordinateSystem.Name)
ListBox1.Items.Add("")
ListBox1.Items.Add("XY Domain")
ListBox1.Items.Add(" Xmin:" & dXmin)
ListBox1.Items.Add(" Xmax:" & dXmax)
ListBox1.Items.Add(" Ymin:" & dYmin)
ListBox1.Items.Add(" Ymax:" & dYmax)
ListBox1.Items.Add("")
ListBox1.Items.Add("Z domain")
ListBox1.Items.Add(" Zmin:" & dMinZ)
ListBox1.Items.Add(" Zmax:" & dMaxZ)
ListBox1.Items.Add("")
ListBox1.Items.Add("M domain")
ListBox1.Items.Add(" Mmin:" & dMinM)
ListBox1.Items.Add(" Mmax:" & dmaxM)
ElseIf TypeOf pSpatialReference Is IUnknownCoordinateSystem Then
ListBox1.Items.Clear()
ListBox1.Items.Add("Unknown Coordinate System")
ListBox1.Items.Add("")
ListBox1.Items.Add("XY Domain")
ListBox1.Items.Add(" Xmin:" & dXmin)
ListBox1.Items.Add(" Xmax:" & dXmax)
ListBox1.Items.Add(" Ymin:" & dYmin)
ListBox1.Items.Add(" Ymax:" & dYmax)
ListBox1.Items.Add("")
ListBox1.Items.Add("Z domain")
ListBox1.Items.Add(" Zmin:" & dMinZ)
ListBox1.Items.Add(" Zmax:" & dMaxZ)
ListBox1.Items.Add("")
ListBox1.Items.Add("M domain")
ListBox1.Items.Add(" Mmin:" & dMinM)
ListBox1.Items.Add(" Mmax:" & dmaxM)
End If
Else
If TypeOf pSpatialReference Is IGeographicCoordinateSystem Then
pGeoCoordsys = pSpatialReference
ListBox1.Items.Clear()
ListBox1.Items.Add("Geographic Coordinate System")
ListBox1.Items.Add(" Name:" & pSpatialReference.Name)
End If
If TypeOf pSpatialReference Is IProjectedCoordinateSystem Then
pProjectedcoordSys = pSpatialReference
ListBox1.Items.Clear()
ListBox1.Items.Add("Projected Coordinate System")
ListBox1.Items.Add("Name:" & pSpatialReference.Name)
ListBox1.Items.Add("")
ListBox1.Items.Add("Geographic Coordinate System")
ListBox1.Items.Add("Name:" & pProjectedcoordSys.GeographicCoordinateSystem.Name)
ElseIf TypeOf pSpatialReference Is IUnknownCoordinateSystem Then
ListBox1.Items.Clear()
ListBox1.Items.Add("Unknown Coordinate System")
End If
End If
End Sub
End Class
浙公网安备 33010602011771号