Bagaimana cara mengekspor hanya beberapa kelas fitur ke xml menggunakan ArcObjects?

8

Saya perlu mengekspor beberapa kelas fitur ke file xml ("export xml workspace") cukup sering sehingga saya ingin mengotomatiskan prosesnya. Saya telah menemukan contoh di sini cara mengekspor dataset fitur ke file xml. Saya belum dapat memodifikasi kode sehingga hanya akan mengekspor kelas fitur yang saya inginkan (misalnya hanya yang yang dimulai dengan huruf 'A'). Saya juga perlu mengekspor tabel dan kelas hubungan (hanya skema).

Apakah ini mungkin? Saya tahu ada antarmuka IFeatureClassName, tetapi saya tidak tahu bagaimana menggunakannya dalam kasus ini. Haruskah ini dilakukan dengan arcpy?

Saya menggunakan ArcGIS 10.0 SP3.

kor_
sumber

Jawaban:

6

Alih-alih mendapatkan dataset:

// Retrieve the first feature dataset from the workspace.
IEnumDatasetName enumDatasetName = workspace.get_DatasetNames
    (esriDatasetType.esriDTFeatureDataset);

Anda bisa mendapatkan kelas fitur dengan:

IEnumDatasetName enumDatasetName = workspace.get_DatasetNames(esriDatasetType.esriDTFeatureClass);

Lihat utas ini:

Mengekspor / mengimpor kelas fitur geodatabase ke file XML

MEMPERBARUI

Anda bisa mendapatkan nama fc dalam dataset geodatabase / fitur menggunakan kode ini (solusi di VB.NET):

Sub TestGetContents()

        Try
            Dim pGxApp As IGxApplication
            Dim Type As System.Type = System.Type.GetTypeFromCLSID(GetType(ESRI.ArcGIS.Framework.AppRefClass).GUID)
            pGxApp = TryCast(Activator.CreateInstance(Type), ESRI.ArcGIS.CatalogUI.IGxApplication)
            'select geodatabase in Catalog tree
            If Not TypeOf pGxApp.SelectedObject Is IGxDatabase Then
                Debug.Print("select a geodb first")
                Exit Sub
            End If
            Dim c As Collection
            c = GetContents(pGxApp.SelectedObject)
            Dim l As Long
            For l = 1 To c.Count
                Dim pName As IName
                pName = c.Item(l)
                If TypeOf pName Is IFeatureClassName Then
                    Dim pFC As IFeatureClass
                    pFC = pName.Open
                    MessageBox.Show(pFC.AliasName)

                ElseIf TypeOf pName Is IFeatureDatasetName Then
                    Dim pDSName As IDatasetName
                    pDSName = pName
                    MessageBox.Show(pDSName.Name)

                End If
            Next l
        Catch ex As Exception
            MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
        End Try

    End Sub


    Function GetContents(ByVal pGxDB As IGxDatabase) As Collection

        Try
            Dim c As New Collection
            Dim pEnumDSName As IEnumDatasetName
            pEnumDSName = pGxDB.Workspace.DatasetNames(esriDatasetType.esriDTAny)
            Dim pDSName As IDatasetName
            pDSName = pEnumDSName.Next
            Do Until pDSName Is Nothing
                If TypeOf pDSName Is IFeatureClassName Then
                    c.Add(pDSName)
                ElseIf TypeOf pDSName Is IFeatureDatasetName Then
                    c.Add(pDSName)
                    AddSubNames(pDSName, c)
                End If
                pDSName = pEnumDSName.Next
            Loop
            GetContents = c
        Catch ex As Exception
            MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
        End Try

    End Function

    Sub AddSubNames(ByVal pDSName1 As IDatasetName, ByVal c As Collection)
        Try
            Dim pEnumDSName As IEnumDatasetName
            pEnumDSName = pDSName1.SubsetNames
            pEnumDSName.Reset()
            Dim pDSName2 As IDatasetName
            pDSName2 = pEnumDSName.Next
            Do Until pDSName2 Is Nothing
                If TypeOf pDSName2 Is IFeatureClassName Then
                    c.Add(pDSName2)
                End If
                pDSName2 = pEnumDSName.Next
            Loop
        Catch ex As Exception
            MessageBox.Show("Caught an unspecified error in the calling code: " & vbCrLf & ex.ToString)
        End Try

    End Sub

Kode direferensikan dari pos ini:

ArcObjects - enumerating kelas fitur dan dataset dalam geodatabase

artwork21
sumber
Contoh di utasnya hampir sama dengan yang sudah saya coba. Saya tidak mengerti bagaimana cara memfilter kelas fitur dari IEnumDatasetNameobjek? The (IName)name.NameStringselalu mengembalikan sebuah string kosong. Saya juga mendapatkan pengecualian (Pengecualian dari HRESULT: 0x80040220) dari GenerateNameMappingdengan contoh kode saat ini ...
kor_
@kor_, Lihat jawaban saya yang diperbarui.
artwork21
Ah, jadi saya harus melemparkan INameke IFeatureClassNameatau IFeatureClassdan kemudian membukanya, dan MAKA saya memiliki nama sebenarnya. Betapa berantakan itu!
kor_
4

Jika Anda berada di 10.1, coba gunakan alat geoprosesing Dokumen XML Workspace (Manajemen Data) .

Saya tidak yakin apa yang akan dilakukan jika Anda menentukan kelas fitur yang berpartisipasi dalam kelas hubungan, tapi saya membayangkan itu akan mencakup kelas hubungan dan kelas objek terkait juga.

blah238
sumber