Làm cách nào để chỉ xuất một số lớp đối tượng sang xml bằng ArcObjects?


8

Tôi cần xuất một số lớp tính năng sang tệp xml ("xuất không gian làm việc xml") khá thường xuyên để tôi muốn tự động hóa quy trình. Tôi đã tìm thấy một ví dụ ở đây về cách xuất tập dữ liệu tính năng sang tệp xml. Tôi đã không thể sửa đổi mã để nó chỉ xuất các lớp tính năng mà tôi muốn (ví dụ: chỉ các lớp bắt đầu bằng một chữ cái 'A'). Tôi cũng cần xuất các bảng và các lớp quan hệ (chỉ lược đồ).

cái này nó có hoàn toàn có thể xảy ra được không? Tôi biết có một giao diện IFeatureClassName, nhưng tôi không biết sử dụng nó trong trường hợp này. Điều này nên được thực hiện với Arcpy thay thế?

Tôi đang sử dụng ArcGIS 10.0 SP3.

Câu trả lời:


6

Thay vì lấy tập dữ liệu:

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

Bạn có thể nhận được lớp tính năng bằng cách:

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

Xem chủ đề này:

Xuất / nhập lớp tính năng cơ sở dữ liệu địa lý sang tệp XML

CẬP NHẬT

Bạn có thể nhận tên fc trong bộ dữ liệu địa lý / dữ liệu tính năng bằng mã này (giải pháp trong 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

Mã được tham chiếu từ bài viết này:

ArcObjects - liệt kê các lớp tính năng và bộ dữ liệu trong cơ sở dữ liệu địa lý


Ví dụ trong chuỗi tương tự như tôi đã từng thử. Tôi không hiểu làm cách nào để lọc các lớp IEnumDatasetNameđối tượng khỏi đối tượng? Các (IName)name.NameStringluôn trả về một chuỗi rỗng. Tôi cũng nhận được một ngoại lệ (Ngoại lệ từ HRESULT: 0x80040220) từ GenerateNameMappingví dụ mã hiện tại ...
kor_

@kor_, Xem câu trả lời cập nhật của tôi.
nghệ thuật21

À, vậy tôi phải bỏ INamequa IFeatureClassNamehoặc IFeatureClassmở nó ra, và THÌ tôi có tên thật. Thật là bừa bộn!
kor_

4

Nếu bạn ở mức 10.1, hãy thử sử dụng công cụ xử lý địa lý Xuất dữ liệu không gian làm việc (Quản lý dữ liệu) .

Tôi không chắc chính xác nó sẽ làm gì nếu bạn chỉ định một lớp đối tượng tham gia vào một lớp mối quan hệ, nhưng tôi tưởng tượng nó sẽ bao gồm cả lớp mối quan hệ và các lớp đối tượng liên quan.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.