Como exportar apenas algumas classes de recursos para xml usando o ArcObjects?

8

Preciso exportar algumas das classes de recurso para um arquivo xml ("export xml workspace") com bastante frequência, para que eu automatize o processo. Encontrei um exemplo aqui de como exportar um conjunto de dados de recursos para um arquivo xml. Não consegui modificar o código para que ele exportasse apenas as classes de recursos que eu quero (por exemplo, apenas as que começam com a letra 'A'). Também preciso exportar as tabelas e as classes de relacionamento (somente esquema).

Isso é possível em tudo? Eu sei que existe uma interface IFeatureClassName, mas não sei como usá-la neste caso. Isso deve ser feito com o arcpy?

Estou usando o ArcGIS 10.0 SP3.

kor_
fonte

Respostas:

6

Em vez de obter o conjunto de dados:

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

Você pode obter a classe de recurso:

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

Veja este tópico:

Exportando / Importando uma Classe de Recurso Geodatabase para um Arquivo XML

ATUALIZAR

Você pode obter nomes fc no conjunto de dados geodatabase / feature usando este código (solução no 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

Código referenciado nesta postagem:

ArcObjects - enumerando classes de recursos e conjuntos de dados em um geodatabase

artwork21
fonte
O exemplo no segmento é praticamente o mesmo que eu já tentei. Não entendo como filtrar as classes de recurso do IEnumDatasetNameobjeto? O (IName)name.NameStringsempre retorna uma string vazia. Eu também recebo uma exceção (Exceção de HRESULT: 0x80040220) GenerateNameMappingcom o exemplo de código atual ...
kor_
@kor_, veja minha resposta atualizada.
precisa saber é o seguinte
Ah, então eu tenho que lançar o INamepara IFeatureClassNameou IFeatureClassentão abri-lo e ENTÃO eu tenho o nome real. Quão bagunçado é isso!
kor_
4

Se você está na versão 10.1, tente usar a ferramenta de geoprocessamento Exportar documento de espaço de trabalho XML (Gerenciamento de dados) .

Não sei exatamente o que fará se você especificar uma classe de recurso que participe de uma classe de relacionamento, mas imagino que incluirá também a classe de relacionamento e as classes de objetos relacionados.

blah238
fonte