Ein FeatureClass erstellen mit VBA

Hallo Leute,
möchte gerne wissen wie man mit VBA ein neues FeatureClass erzeugt,
kann mir da jemand weiter helfen.

mfg
Susan
Die IFeatureWorkspace Schnittstelle hat die Methode CreateFeatureClass. In der Hilfe findest du auch ein Beispiel (für Shapefiles).
danke für deine hilfe,
habe diesen kode gefunden,
wie kann ich denn damit ein neues
FeatureClass in einer Geodatabase erstellen,ich möchte kein shape erstellen,kann mir jemand weiter helfen?

mfg
Susan

Public Sub CreateShapefile()

Dim strFolder As String
Dim strName As String
Const strShapeFieldName As String = "Shape"

Dim pGxDialog As IGxDialog
Dim pGxObjectFilter As IGxObjectFilter
Dim pGxObj As IGxObject

'Get new filename and path from file dialog
Set pGxDialog = New GxDialog
Set pGxObjectFilter = New GxFilterGeoDatasets
pGxDialog.AllowMultiSelect = False

Set pGxDialog.ObjectFilter = pGxObjectFilter
pGxDialog.Title = "Shape Speichern unter:"
pGxDialog.Name = "Test"
If pGxDialog.DoModalSave(0) Then
Set pGxObj = pGxDialog.FinalLocation

End If
' If strFolder = "" Then Exit Sub

strFolder = pGxObj.FullName
strName = pGxDialog.Name
Debug.Print strFolder

Dim pFWS As IFeatureWorkspace
Dim pWorkspaceFactory As IWorkspaceFactory
Set pWorkspaceFactory = New ShapefileWorkspaceFactory
Set pFWS = pWorkspaceFactory.OpenFromFile(strFolder, 0)

' Set up a simple fields collection
Dim pFields As IFields
Dim pFieldsEdit As IFieldsEdit
Set pFields = New esriCore.Fields
Set pFieldsEdit = pFields

Dim pField As IField
Dim pFieldEdit As IFieldEdit

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

Dim pGeomDef As IGeometryDef
Dim pGeomDefEdit As IGeometryDefEdit
Set pGeomDef = New GeometryDef
Set pGeomDefEdit = pGeomDef
With pGeomDefEdit
.GeometryType = esriGeometryPolygon
Set .SpatialReference = New UnknownCoordinateSystem
End With
Set pFieldEdit.GeometryDef = pGeomDef
pFieldsEdit.AddField pField

' Add another miscellaneous text field
Set pField = New esriCore.field
Set pFieldEdit = pField
With pFieldEdit
.Length = 10
.Name = "Neue_ID"
.Type = esriFieldTypeSingle
End With
pFieldsEdit.AddField pField

' Create the shapefile
' (some parameters apply to geodatabase options and can be defaulted as Nothing)
Dim pFeatClass As IFeatureClass
Set pFeatClass = pFWS.CreateFeatureClass(strName, pFields, Nothing, _
Nothing, esriFTSimple, strShapeFieldName, "")

' 'Add the output layer (clipped features) to the map
Dim pMxDoc As IMxDocument
Dim pMap As IMap
Set pMxDoc = ThisDocument
Set pMap = pMxDoc.FocusMap

Dim pFeatLayer As IFeatureLayer
Set pFeatLayer = New FeatureLayer
Set pFeatLayer.featureclass = pFeatClass
pFeatLayer.Name = pFeatClass.AliasName
pMxDoc.FocusMap.AddLayer pFeatLayer
End Sub
Meinst du eine Personal Geodatabase? Dann musst du eine AccessWorkspaceFactory benutzen. Da kannst du entweder mit Create eine neue mdb erzeugen oder mit openfromfile eine bestehende öffnen. Sobald du den FeatureWorkspace hast, geht alles wie in deinem Beispiel weiter.
Guten Morgen zusammen.
Ich habe das gemacht was du geschrieben hast. Leider bekomme ich eine Fehlermeldung. Hier an dieser Stelle.

Set pFeatClass = pFWS.CreateFeatureClass(strName, pFields, Nothing, _
Nothing, esriFTSimple, strShapeFieldName, "")

könntes du das mal prüfen?
mfg
Susan
Was sagt denn die Fehlermeldung??
Laufzeitfehler ´-2147467259(80004005)

Allgemeiner Funktionsfehler
Ach ja, du solltest auch darauf achten, daß die Geodatabase wirklich existiert und niemand anderer gerade darauf zugreift (z.B. ArcCatalog).
Hallo Leute,
leider läuft das Programm trotzdem nicht:-( hab alle Veränderungen durch genommen und mir auch die Links angeschaut.

Bin zum Entschluss gekommen das Programm in diesem Link zu benutzen.

http://arcobjectsonline.esri.com/ArcObjectsOnline/Samples/Geodatabase/ Creating%20Data/CreateDatasetFeatureclass.htm

Aber leider ist es in einer Funktion,
was nicht so ohne weiteres läuft.

kann mir jemand sagen wie ich daraus eine "Public Sub" Macro erstelle.
danke schon mal an alle

mfg
Susan
Hallo Susan,


deine Public Sub muesste ungefaehr so aussehen:

Public Sub neueFeatureClass()

'Vorhandene Geodatabase öffnen
Dim pAccessWSF As IWorkspaceFactory
Dim pWorkspace As IWorkspace

Set pAccessWSF = New AccessWorkspaceFactory
Set pWorkspace = pAccessWSF.OpenFromFile(ParentFolder, 0)

' Fuer Polygone
Set pFeatClassMuell = createWorkspaceFeatureClass(pWorkspace, "Polygone", 1, 4)
' Fuer Polylines
'Set pFeatClassDamm = createWorkspaceFeatureClass(pWorkspace, "Linien", 1, 3)
' Fuer Punkte
'Set pFeatClassEinzel = createWorkspaceFeatureClass(pWorkspace, "Punkte", 1, 1)

' Layer hinzufuegen
Dim pFLayer As IFeatureLayer
Set pFLayer = New FeatureLayer
Set pFLayer.FeatureClass = pFClass

Dim pMxDoc As IMxDocument
Set pMxDoc = ThisDocument

Dim pMap As IMap
Set pMap = pMxDoc.Focusmap
pMap.AddLayer pFLayer

End Sub

Hierfuer benoetigst du das Besipiel:

createWorkspaceFeatureClass

als Private Function in deinem Modul oder als Public Function in einem anderen Modul deines Projektes oder einer Vorlage.


Viel Erfolg und Gruss


Uwe

DB-GIS.de
Hallo Susan,

was ich vergass: PartentFolder im obigen Code ist der Name deiner MDB-Datei, z. B. "c:\data\meineGDB.mdb". Dito koenntest du schreiben:

Dim ParentFolder As String
ParentFolder = InputBox("Name der GDB", "Geodatabase", "c:\data\meineGDB.mdb")

Gruss und Happy GISsing


Uwe
hallo Uwe
danke für deine Hilfe das hat sehr gut geklappt.
Was ich dich fragen wollte wie bekomme ein Featureclass in ein Feature Dataset?
hast du da eine idee?

PS: die Seit www.DB-GIS.de ist die von dir?

mfg
Susan
Hallo Susan,

das Sample hierzu findest du in der Hilfe unter:

Samples -> Geodatabase -> Creating data

oder unter ArcObjectsOnline.esri.com.

Gruss und viel Erfolg

Uwe

P.S. Ja. Die Seiten sind allerdings noch in der Mache. Das Forum habe ich erstellt, bevor ich dieses kennengelernt habe; werde es aber wohl weiter laufen lassen, in der Hoffnung, dass es sich mit Leben fuellt.