Thêm GeoPackage vào ArcGIS Desktop bằng ArcObjects

Oct 27 2020

Làm cách nào để thêm lớp GeoPackage vào ArcGIS Desktop bằng mã ArcObjects (tốt nhất là c #)?

Từ tài liệu ESRI:

WorkspaceFactoryProgID xác định ProgID của đối tượng WorkspaceFactory được sử dụng để mở không gian làm việc cụ thể đó.

Dưới đây là danh sách một số WorkspaceFactoryProgIDs có thể có:

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

Việc sử dụng từ "một số" khiến tôi nghĩ rằng có thể có nhiều nhà máy hơn. Bạn chắc chắn có thể thêm các lớp GeoPackage bằng nút AddData trong ArcMap.

Trả lời

3 Hornbydd Oct 28 2020 at 14:34

Dưới đây là một số mã VBA sẽ tải FeatureClass trong geoPackage vào bản đồ trong ArcMap. Bạn cần phải truy cập nó thông qua 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