4

How do you open up a File GDB and read out a simple feature class?

The snippet for retreiving a shapefile from a regular folder on disk works, and I suppose I can use the same code but with a different kind of workspace.

''' <summary>
''' Get the FeatureClass from a Shapefile on disk (hard drive).
''' </summary>
''' <param name="string_ShapefileDirectory">A System.String that is the directory where the shapefile is located. Example: "C:\data\USA"</param>
''' <param name="string_ShapefileName">A System.String that is the shapefile name. Note: the shapefile extension's (.shp, .shx, .dbf, etc.) is not provided! Example: "States"</param>
''' <returns>An IFeatureClass interface. Nothing (VB.NET) or null (C#) is returned if unsuccessful.</returns>
''' <remarks></remarks>
Public Function GetFeatureClassFromShapefileOnDisk(ByVal string_ShapefileDirectory As System.String, ByVal string_ShapefileName As System.String) As ESRI.ArcGIS.Geodatabase.IFeatureClass
 Dim directoryInfo_check As System.IO.DirectoryInfo = New System.IO.DirectoryInfo(string_ShapefileDirectory)
 If directoryInfo_check.Exists Then
 'We have a valid directory, proceed
 Dim fileInfo_check As System.IO.FileInfo = New System.IO.FileInfo(string_ShapefileDirectory + "\" + string_ShapefileName + ".shp")
 If fileInfo_check.Exists Then
 'We have a valid shapefile, proceed
 Dim workspaceFactory As ESRI.ArcGIS.Geodatabase.IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass
 Dim workspace As ESRI.ArcGIS.Geodatabase.IWorkspace = workspaceFactory.OpenFromFile(string_ShapefileDirectory, 0)
 Dim featureWorkspace As ESRI.ArcGIS.Geodatabase.IFeatureWorkspace = CType(workspace, ESRI.ArcGIS.Geodatabase.IFeatureWorkspace) ' Explict Cast
 Dim featureClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = featureWorkspace.OpenFeatureClass(string_ShapefileName)
 Return featureClass
 Else
 'Not valid shapefile
 Return Nothing
 End If
 Else
 ' Not valid directory
 Return Nothing
 End If
End Function
PolyGeo
65.5k29 gold badges115 silver badges350 bronze badges
asked May 21, 2015 at 14:53

1 Answer 1

6

Assuming your project is setup correctly, with all references added and compiles without errors. Using Visual Studio Express 2013, ArcGIS 10.3 and targeting .Net framework 3.5

Also ensure you add ArcObjects Library References to:

  • DataSourcesGDB
  • GeoDatabase
  • Carto
Public Sub New()
On Error GoTo Trap
 Dim sPathFGDB As String
 Dim sFCName As String
 Dim pFC As IFeatureClass
 Dim pWorkSpace As IFeatureWorkspace
 Dim pWorkspaceFactory As IWorkspaceFactory = New ESRI.ArcGIS.DataSourcesGDB.FileGDBWorkspaceFactory
 sPathFGDB = InputBox("Enter path to FGDB:", "Path to FGDB", "C:\Users\jakub.sisak\Documents\ArcGIS\Default.gdb") 'enter a valid path including the ".gdb" extension
 pWorkSpace = pWorkspaceFactory.OpenFromFile(sPathFGDB, 0) 
 sFCName = InputBox("Enter Feature Class Name:", "Feature Class Name", "Closure_Plan_GA_Footprint_DE") 'enter a valid feature class name
 pFC = pWorkSpace.OpenFeatureClass(sFCName)
 Dim pLayer As IFeatureLayer
 pLayer = New FeatureLayer
 pLayer.FeatureClass = pFC
 pLayer.Name = pFC.AliasName
 Dim pMxDoc As ESRI.ArcGIS.ArcMapUI.IMxDocument = My.ArcMap.Document 
 pMxDoc.FocusMap.AddLayer(pLayer)
 pMxDoc.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, pLayer, Nothing)
Exit Sub
Trap:
 MsgBox(Err.Number & ": " & Err.Description)
End Sub
Hornbydd
44.9k5 gold badges43 silver badges84 bronze badges
answered May 21, 2015 at 16:20
8
  • Just out of preference for code that is closer to C# and more .NET friendly, I would replace replace the On Error GoToTrap and Trap with a Try Catch Finally block. Also, I would replace the MsgBox with the Forms MessageBox and InputBox with a custom form (since there isn't a C# InputBox equivalent. It'll all work, but I have seen more examples using more .NET libraries as opposed to the VB6 (VisualBasic.dll) libraries. I just find it easier when writing code in both VB.NET and C# to translate when I exclude VB6 items. Commented May 21, 2015 at 16:58
  • Thanks for your input. OP is asking about VB.Net not C#. This procedure illustrates the mechanics of getting then adding a FGDB Feature to Map which is the focus here. Commented May 21, 2015 at 17:12
  • Yes which is why I posted as a comment. It is better to adapt to C# style VB.NET instead of VB6 since VB6 is a legacy style. Commented May 21, 2015 at 18:16
  • @Jakub thank you very much! That was quite easy! I was too fixated on the fileInfo existance check, but a path to a feature class in a gdb is kind of hard to manage. I used IWorkspace2.NameExist() instead. Thanks for also adding how to add the layer to a map! Commented May 22, 2015 at 13:36
  • @Branco I agree, I don't know a lot of VB6, I'm a C# guy who's working on a vb project for a change so I also stick to the .NET framework Commented May 22, 2015 at 13:39

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.