ArcObjects kullanarak ArcGIS Desktop'a GeoPackage Ekleme

Oct 27 2020

ArcObjects kodunu (tercihen c #) kullanarak ArcGIS Desktop’a nasıl GeoPackage katmanı ekleyebilirim?

ESRI belgelerinden:

WorkspaceFactoryProgID, söz konusu çalışma alanını açmak için kullanılan WorkspaceFactory nesnesinin ProgID'sini tanımlar.

Olası WorkspaceFactoryProgID'lerden bazılarının listesi aşağıdadır:

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

"Bazı" kelimesinin kullanılması, daha fazla fabrikanın mevcut olabileceğini düşündürüyor. ArcMap'teki AddData düğmesini kullanarak kesinlikle GeoPackage katmanları ekleyebilirsiniz.

Yanıtlar

3 Hornbydd Oct 28 2020 at 14:34

Aşağıda, geoPackage'daki FeatureClass'ı ArcMap'teki bir haritaya yükleyecek bazı VBA kodu verilmiştir. Ona erişmeniz gerekiyor 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