创建Shape文件

本例实现的是如何创建一个Shape文件。

l   要点

首先创建新IField接口实例,生成新字段,并获得该实例的IFieldEdit接口对象,用FieldsEdit的AddField方法将新字段加入到IFields接口对象中,最后用IFeatureWorkspace的CreateFeatureClass方法生成新的Shape文件

主要用到IFeatureWorkspace接口,IWorkspaceFactory接口,IFieldsEdit接口,IFieldEdit接口,IFeatureClass接口。

l   程序说明

函数CreatShapeFile根据输入的文件路径和文件名,创建Shape文件。

l   代码、

Private Sub CreatShapeFile(ByVal sFilePath As String, ByVal sFileName As String)

    Dim pFeatureWorkspace           As IFeatureWorkspace
    Dim pWorkspaceFactory           As IWorkspaceFactory
    Dim pFields                     As IFields
    Dim pFieldsEdit                 As IFieldsEdit
    Dim pField                      As IField
    Dim pFieldEdit                  As IFieldEdit
    Dim pGeometryDef                As IGeometryDef
    Dim pGeometryDefEdit            As IGeometryDefEdit
    Dim pFeatClass                  As IFeatureClass
    Dim sShapeFieldName             As String
    Dim sNewShapeFileName           As String

On Error GoTo ErrorHandler:

    sNewShapeFileName = Dir(sFilePath & sFileName & ".shp")
    If (sNewShapeFileName <> "") Then
        MsgBox ("文件已经存在")
        Exit Sub
    End If

    sShapeFieldName = "Shape"

    'Open the folder to contain the shapefile as a workspace
    Set pWorkspaceFactory = New ShapefileWorkspaceFactory
    Set pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(sFilePath, 0)

    'Set up a simple fields collection
    Set pFields = New esriCore.Fields
    Set pFieldsEdit = pFields

    'Make the shape field
    'it will need a geometry definition, with a spatial reference
    Set pField = New esriCore.Field
    Set pFieldEdit = pField

    pFieldEdit.Name = sShapeFieldName
    pFieldEdit.Type = esriFieldTypeGeometry

    Set pGeometryDef = New GeometryDef
    Set pGeometryDefEdit = pGeometryDef
    With pGeometryDefEdit
        .GeometryType = esriGeometryPolygon
        Set .SpatialReference = New UnknownCoordinateSystem
    End With
    Set pFieldEdit.GeometryDef = pGeometryDef

    pFieldsEdit.AddField pField

    'Add others miscellaneous text field
    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Name = "SmallInteger"
        .Type = esriFieldTypeSmallInteger
    End With

    pFieldsEdit.AddField pField

    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Name = "Integer"
        .Type = esriFieldTypeInteger
    End With

    pFieldsEdit.AddField pField

    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Name = "Single"
        .Type = esriFieldTypeSingle
    End With

    pFieldsEdit.AddField pField

    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Precision = 5
        .Scale = 5
        .Name = "Double"
        .Type = esriFieldTypeDouble
    End With

    pFieldsEdit.AddField pField

    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Length = 30
        .Name = "String"
        .Type = esriFieldTypeString
    End With

    pFieldsEdit.AddField pField

    Set pField = New esriCore.Field
    Set pFieldEdit = pField
    With pFieldEdit
        .Name = "Date"
        .Type = esriFieldTypeDate
    End With

    pFieldsEdit.AddField pField    

    'Create the shapefile
    '(some parameters apply to geodatabase options and can be defaulted as Nothing)
    Set pFeatClass = pFeatureWorkspace.CreateFeatureClass _
        (sFileName, pFields, Nothing, Nothing, _
        esriFTSimple, sShapeFieldName, "")

    sNewShapeFileName = Dir(sFilePath & "\MyShapeFile.shp")

    If (sNewShapeFileName = "") Then
        MsgBox ("Build Success")
    Else
        MsgBox ("Build Fail")
    End If

    Exit Sub

ErrorHandler:
    MsgBox Err.Description

End Sub

Private Sub UIButtonControl1_Click()

    Dim pVBProject              As VBProject

On Error GoTo ErrorHandler:

    Set pVBProject = ThisDocument.VBProject
    'Dont include .shp extension
    CreatShapeFile pVBProject.FileName & "\..\..\..\.." & "\data\", "MyShapeFile"

    Exit Sub

ErrorHandler:
    MsgBox Err.Description

End Sub

Private Sub UIButtonControl1_Click()

    Dim pVBProject              As VBProject

On Error GoTo ErrorHandler:

    Set pVBProject = ThisDocument.VBProject
    'Dont include .shp extension
    CreatShapeFile pVBProject.FileName & "\..\..\..\.." & "\data\", "MyShapeFile"

    Exit Sub

ErrorHandler:
    MsgBox Err.Description

End Sub

posted @ 2012-04-06 20:39  LinHugh  阅读(678)  评论(0编辑  收藏  举报