''' <summary>
''' 创建Annotation类型的featureclass
''' </summary>
''' <param name="pWorkspace">annotation的工作空间</param>
''' <param name="pTextSymbol">annotation的symbol</param>
''' <param name="pRefeScale">annotation的比例</param>
''' <param name="pAnnoFeatName">annotation的名称</param>
''' <returns>创建的Annotation Featureclass</returns>
''' <remarks></remarks>
Private Function CreateAnnoFeatCls(ByVal pWorkspace As IFeatureWorkspace, ByVal pTextSymbol As ITextSymbol, ByVal pRefeScale As Double, ByVal pAnnoFeatName As String, Optional ByVal pSymbolID As Integer = 0) As IFeatureClass
Dim pField As IField
Dim pFields As IFields
Dim pSource As IClone
Dim pObjectClassDesc As IObjectClassDescription
Dim pFeatClassDesc As IFeatureClassDescription
''创建Annotation的Fields
pObjectClassDesc = New AnnotationFeatureClassDescription
pFeatClassDesc = pObjectClassDesc
pSource = pObjectClassDesc.RequiredFields
pFields = pSource.Clone
''创建Annotation的Geometry defintion
pField = pFields.Field(pFields.FindField(pFeatClassDesc.ShapeFieldName))
''创建Reference scale
Dim pGraphicsLayerScale As IGraphicsLayerScale
pGraphicsLayerScale = New GraphicsLayerScale
pGraphicsLayerScale.ReferenceScale = pRefeScale
pGraphicsLayerScale.Units = esriUnits.esriMeters
''创建Symbolcollection
Dim pSymbolColl As ISymbolCollection2
Dim pSymbolIdent As ISymbolIdentifier2 = New SymbolIdentifier
pSymbolColl = New SymbolCollection
pSymbolColl.AddSymbol(pTextSymbol, "Default", pSymbolIdent)
If pSymbolID = 1 Then pSymbolColl.AddSymbol(pTextSymbol, "Default 1", pSymbolIdent)
''创建Label的相关属性
Dim pOverposterProperties As IOverposterProperties
Dim pAnnoPropsColl As IAnnotateLayerPropertiesCollection
Dim pLabelEngineLP As ILabelEngineLayerProperties
Dim pAnnotateLayerProps As IAnnotateLayerProperties
pOverposterProperties = New BasicOverposterProperties
pAnnoPropsColl = New AnnotateLayerPropertiesCollection
pLabelEngineLP = New LabelEngineLayerProperties
pAnnotateLayerProps = pLabelEngineLP
pAnnotateLayerProps.Class = "Default"
pLabelEngineLP.Symbol = pTextSymbol
pLabelEngineLP.SymbolID = pSymbolIdent.ID
pAnnoPropsColl.Add(pLabelEngineLP)
''创建Annotation layer
Dim pAnnoLayerFactory As IAnnotationLayerFactory
Dim pAnnoLayer As IAnnotationLayer
pAnnoLayerFactory = New FDOGraphicsLayerFactory
pAnnoLayer = pAnnoLayerFactory.CreateAnnotationLayer(pWorkspace, Nothing, pAnnoFeatName, pField.GeometryDef, Nothing, pAnnoPropsColl, pGraphicsLayerScale, pSymbolColl, False, False, False, True, pOverposterProperties, "")
Return CType(pAnnoLayer, IFeatureLayer).FeatureClass
End Function
''' <summary>
''' 创建存于Shapefile中的featureclass
''' </summary>
''' <param name="sDir"></param>
''' <param name="sName"></param>
''' <param name="shapeType"></param>
''' <param name="hasM"></param>
''' <param name="hasZ"></param>
''' <param name="pSR"></param>
''' <param name="pFields"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function CreateShapefile(ByVal sDir As String, ByVal sName As String, ByVal shapeType As esriGeometryType, _
ByVal hasM As Boolean, ByVal hasZ As Boolean, ByVal pSR As ISpatialReference, ByVal pFields As IFields) As IFeatureClass
Try
Dim shapeWorkspaceFactory As IWorkspaceFactory
shapeWorkspaceFactory = New ShapefileWorkspaceFactory
Dim shapeWorkspace As IFeatureWorkspace
shapeWorkspace = shapeWorkspaceFactory.OpenFromFile(sDir, 0)
If (Not shapeWorkspace Is Nothing) Then
If pFields Is Nothing Then pFields = CreateBasicFields(shapeType, hasM, hasZ, pSR) '
Dim pFClass As IFeatureClass
pFClass = shapeWorkspace.CreateFeatureClass(sName, pFields, Nothing, Nothing, esriFeatureType.esriFTSimple, "Shape", "")
Return pFClass
End If
Return Nothing
Catch ex As Exception
MsgBox(ex.Message)
Return Nothing
End Try
End Function
''' <summary>
''' 创建存于内存中的Featureclass
''' </summary>
''' <param name="pFields"></param>
''' <param name="featureClassName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function GetSimpleFeatureClass(ByVal pFields As IFields, ByVal featureClassName As String) As IFeatureClass
Try
Dim pSwf As IWorkspaceFactory = New InMemoryWorkspaceFactory
Dim pWorkspaceName As IWorkspaceName = pSwf.Create("", "MyWorkspace", Nothing, 0)
Dim pFWS As IFeatureWorkspace = CType(pWorkspaceName, IName).Open()
Dim pFC As IFeatureClass = pFWS.CreateFeatureClass(featureClassName, pFields, Nothing, Nothing, esriFeatureType.esriFTSimple, "Shape", Nothing)
Return pFC
Catch ex As Exception
Return Nothing
End Try
End Function
''' <summary>
''' 创建存于Access中的featureclass
''' </summary>
''' <param name="pFields"></param>
''' <param name="pAccessPath"></param>
''' <param name="pAccessName"></param>
''' <param name="featureClassName"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function CreateAccessFeatureClass(ByVal pFields As IFields, ByVal pAccessPath As String, ByVal pAccessName As String, ByVal featureClassName As String) As IFeatureClass
Try
Dim pSwf As IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactory
Dim pWorkspaceName As IWorkspaceName = pSwf.Create(pAccessPath, pAccessName, Nothing, 0)
Dim pFWS As IFeatureWorkspace = CType(pWorkspaceName, IName).Open()
pFields = CreateBasicFields(esriGeometryType.esriGeometryPoint, False, False, New UnknownCoordinateSystem)
Dim pFC As IFeatureClass = pFWS.CreateFeatureClass(featureClassName, pFields, Nothing, Nothing, esriFeatureType.esriFTSimple, "Shape", Nothing)
Return pFC
Catch ex As Exception
Return Nothing
End Try
End Function