Aggiunta di GeoPackage ad ArcGIS Desktop utilizzando ArcObjects

Oct 27 2020

Come si aggiunge un livello GeoPackage ad ArcGIS Desktop utilizzando il codice ArcObjects (preferibilmente c #)?

Dalla documentazione ESRI:

WorkspaceFactoryProgID identifica il ProgID dell'oggetto WorkspaceFactory utilizzato per aprire quella particolare area di lavoro.

Di seguito è riportato un elenco di alcuni dei possibili WorkspaceFactoryProgID:

esriDataSourcesGDB.AccessWorkspaceFactory
esriDataSourcesFile.ArcInfoWorkspaceFactory
esriDataSourcesFile.CadWorkspaceFactory 
esriDataSourcesGDB.FileGDBWorkspaceFactory
esriDataSourcesOleDB.OLEDBWorkspaceFactory
esriDataSourcesFile.PCCoverageWorkspaceFactory
esriDataSourcesRaster.RasterWorkspaceFactory
esriDataSourcesGDB.SdeWorkspaceFactory
esriDataSourcesFile.ShapefileWorkspaceFactory
esriDataSourcesOleDB.TextFileWorkspaceFactory
esriDataSourcesFile.TinWorkspaceFactory
esriDataSourcesFile.VpfWorkspaceFactory

L'uso della parola "alcuni" mi fa pensare che potrebbero esserci più fabbriche disponibili. Puoi sicuramente aggiungere layer GeoPackage usando il pulsante AddData in ArcMap.

Risposte

3 Hornbydd Oct 28 2020 at 14:34

Di seguito è riportato del codice VBA che caricherà una FeatureClass in un geoPackage in una mappa in ArcMap. Devi accedervi tramite SqlWorkspaceFactory.

Public Sub AddDataToMap()
    ' Path to geopackage
    Dim sPath As String
    Let sPath = "C:\Scratch\test.gpkg"
    
    ' Create workspace factory
    Dim pWSFac As IWorkspaceFactory2
    Set pWSFac = New esriDataSourcesGDB.SqlWorkspaceFactory
    
    ' Open workspace
    Dim pWS As IWorkspace
    Set pWS = pWSFac.OpenFromFile(sPath, 0)
    
    ' cast into Featureworkspace
    Dim pFWS As IFeatureWorkspace
    Set pFWS = pWS
    
    ' open FeatureClass
    Dim pFC As IFeatureClass
    Set pFC = pFWS.OpenFeatureClass("main.fcLines")
    
    ' Create layer
    Dim pFl As IFeatureLayer
    Set pFl = New FeatureLayer
    Set pFl.FeatureClass = pFC
    pFl.Name = "Lines dataset"
    
    ' Add to current map and refresh
    Dim pmxd As IMxDocument
    Set pmxd = ThisDocument
    pmxd.FocusMap.AddLayer pFl
    pmxd.ActiveView.Refresh
    pmxd.UpdateContents        
End Sub