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.

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


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_

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.