ArcObjectsを使用して一部のフィーチャクラスのみをxmlにエクスポートする方法は?


8

一部のフィーチャクラスをxmlファイル( "export xml workspace")にエクスポートする必要があるので、プロセスを自動化したいと思います。ここではフィーチャデータセットをxmlファイルにエクスポートする方法の例を見つけました。必要なフィーチャクラスのみをエクスポートするようにコードを変更できませんでした(たとえば、文字 'A'で始まるもののみ)。テーブルとリレーションシップクラスもエクスポートする必要があります(スキーマのみ)。

これはまったく可能ですか?インターフェイスIFeatureClassNameがあることは知っていますが、この場合の使用方法はわかりません。代わりにこれをarcpyで実行する必要がありますか?

ArcGIS 10.0 SP3を使用しています。

回答:


6

データセットを取得する代わりに:

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

次の方法でフィーチャクラスを取得できます。

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

このスレッドを参照してください:

ジオデータベースフィーチャクラスのXMLファイルへのエクスポート/インポート

更新

次のコードを使用して、ジオデータベース/フィーチャデータセット内のfc名を取得できます(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

この投稿から参照されているコード:

ArcObjects-ジオデータベース内のフィーチャクラスとデータセットの列挙


スレッドの例は、私がすでに試したものとほとんど同じです。IEnumDatasetNameオブジェクトからフィーチャクラスをフィルタリングする方法がわかりません。は(IName)name.NameString常に空の文字列を返します。またGenerateNameMapping、現在のコード例から例外(HRESULTからの例外:0x80040220)も発生します...
kor_

@kor_、私の最新の回答をご覧ください。
アートワーク21

ああ、だから私はキャストINameするIFeatureClassNameIFeatureClass、それからそれを開く必要があります、そして私は実際の名前を持っています。なんて厄介なことでしょう。
kor_ 2013年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.