Adicionando GeoPackage ao ArcGIS Desktop usando ArcObjects

Oct 27 2020

Como adiciono uma camada GeoPackage ao ArcGIS Desktop usando o código ArcObjects (de preferência c #)?

Da documentação da ESRI:

O WorkspaceFactoryProgID identifica o ProgID do objeto WorkspaceFactory que é usado para abrir esse espaço de trabalho específico.

Aqui está uma lista de alguns dos possíveis WorkspaceFactoryProgIDs:

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

O uso da palavra "alguns" me faz pensar que pode haver mais fábricas disponíveis. Você certamente pode adicionar camadas do GeoPackage usando o botão AddData no ArcMap.

Respostas

3 Hornbydd Oct 28 2020 at 14:34

Abaixo está algum código VBA que carregaria uma FeatureClass em um geoPackage em um mapa no ArcMap. Você precisa acessá-lo por meio 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