ArcMap Addin - thêm kết nối khả năng tương tác theo chương trình


10

Tôi hiện đang xây dựng một bổ trợ cho ArcMap - ArcView bằng cách sử dụng khung .Net.

Người dùng ArcMap và Bổ trợ sẽ truy cập dữ liệu được xuất bản từ các dịch vụ WFS.

Tôi biết rằng có thể thêm các dịch vụ WFS theo cách thủ công thông qua giao diện Kết nối tương tác .

Nhưng, có thể thêm các dịch vụ WFS này theo chương trình không? (rất có thể - người dùng của tôi sẽ gặp khó khăn khi thêm những thứ này một cách thủ công)

Và nếu có, làm thế nào nó có thể được thực hiện?

Tôi dường như không thể tìm thấy bất kỳ thông tin về chủ đề này.


1
Bạn có url đến một trang web WFS công cộng không? Nếu vậy, hãy tiếp tục và gửi nó. Bằng cách đó mọi người có thể kiểm tra mã của họ trước khi đưa nó vào câu trả lời.
Kirk Kuykendall

Xin chào, tôi không thể đăng một url công khai - sry mate.
dùng2847

1
Xin chào @ user2847, bạn đã bao giờ tìm thấy giải pháp cho việc này chưa? Cảm ơn
pvdev

Câu trả lời:


1

Thật không may, không có cách nào để tự động thực hiện các yêu cầu của một lớp. Bạn phải lập trình nó thông qua tập tin fdl. Để thêm một dịch vụ (như WFS), bạn có thể sử dụng mã bên dưới.

IWorkspaceFactory factory = (IWorkspaceFactory)new FMEWorkspaceFactoryClass();
IFeatureWorkspace workspace = (IFeatureWorkspace)factory.OpenFromFile("d:\test", 0);
IFeatureDataset fds = workspace.OpenFeatureDataset("name.fdl");  

Chúc mừng!

PS: Bạn đã thử sử dụng giao diện IWFSServer chưa? Tôi đã sử dụng chức năng DI trong một trong các dự án trước đây của mình để xuất dữ liệu sang định dạng GML bằng QuickExport . Bạn có thể thử sử dụng QuickImport và chọn WFS làm nguồn. Tôi đang chỉnh mã QuickExport để bạn tham khảo ...

    Friend Sub Export2GML()
    Dim pGPMessages As IGPMessages
    'Dim pGPMessage As IGPMessage
    Dim pGPEnvMgr As IGPEnvironmentManager
    Dim pGPEnv_CoordSys As IGPEnvironment
    Dim pGPEnv_Extent As IGPEnvironment
    Dim pGPCOMHelper As IGPComHelper
    Dim pGPToolbox As IGPToolbox
    Dim pGPTool As IGPTool
    Dim pParameter As IGPParameter
    Dim pParameterEdit As IGPParameterEdit
    Dim pDataType As IGPDataType

    Dim pToolboxWorkspaceFactory As IWorkspaceFactory
    Dim pToolboxWorkspace As IToolboxWorkspace
    Dim pParamArray As IArray = New ArrayClass
    Dim pProgressTracker As ITrackCancel
    Dim pDSNames As IEnumDatasetName
    Dim pDSN As IDatasetName

    Dim TempWSPath As String = String.Empty
    Dim Inv_Layer_Names As String = String.Empty

    Try
        OS_Layer_Names = String.Empty

        'Get all layer names from the scratch PGDB
        TempWSPath = pTempWS.PathName

        pDSNames = pTempWS.DatasetNames(esriDatasetType.esriDTFeatureClass)
        pDSNames.Reset()

        pDSN = pDSNames.Next
        While Not pDSN Is Nothing
            If pDSN.Name.Contains("X") Or pDSN.Name.Contains("Y") Then
                'If pDSN.Name.Contains("_OS") Then
                ' OS Layers present, export them seperately
                OS_Layer_Names &= TempWSPath & "\" & pDSN.Name & "; "
            Else
                ' Inventory layer
                Inv_Layer_Names &= TempWSPath & "\" & pDSN.Name & "; "
            End If

            pDSN = pDSNames.Next
        End While

        'gputils = New GPUtilities
        pProgressTracker = New TrackCancel

        'Get the environment manager
        pGPCOMHelper = New GpDispatch
        pGPEnvMgr = pGPCOMHelper.EnvironmentManager

        'Set output coordinate system
        pGPEnv_CoordSys = pGPEnvMgr.FindEnvironment("outputCoordinateSystem")
        pGPEnv_CoordSys.Value = pGPEnv_CoordSys.DataType.CreateValue(ArcMap_INSTALL_DIR & "Coordinate Systems\Projected Coordinate Systems\National Grids\Your National Grid.prj")

        'Set extents
        pGPEnv_Extent = pGPEnvMgr.FindEnvironment("extent")
        pGPEnv_Extent.Value = pGPEnv_Extent.DataType.CreateValue("sameAsInput")

        'Create a toolbox workspace factory
        pToolboxWorkspaceFactory = New ToolboxWorkspaceFactory

        'Open toolbox workspace
        pToolboxWorkspace = pToolboxWorkspaceFactory.OpenFromFile(ArcMap_INSTALL_DIR & "ArcToolbox\Toolboxes", 0)

        'Open toolbox by name
        pGPToolbox = pToolboxWorkspace.OpenToolbox("Data Interoperability Tools.tbx")

        'If DI Toolbox is not found, means extensions were not installed
        If pGPToolbox Is Nothing Then
            MsgBox("Data Interoperability Toolbox not found!" & vbCrLf & "Please contact helpdesk.", MsgBoxStyle.Critical)
            Throw New CustomException
        End If

        'Open tool by name
        pGPTool = pGPToolbox.OpenTool("QuickExport")    'You need to use QuickImport

        'Get parameters required for the tool
        pParamArray = pGPTool.ParameterInfo

        If Not (Inv_Layer_Names Is Nothing Or String.IsNullOrEmpty(Inv_Layer_Names) Or Inv_Layer_Names = "") Then
            'Remove trailing ";"
            Inv_Layer_Names = Inv_Layer_Names.Remove(Inv_Layer_Names.LastIndexOf(";"))

            'Set input parameters
            pParameter = pParamArray.Element(0)
            pParameterEdit = pParameter
            pDataType = pParameter.DataType
            pParameterEdit.Value = pDataType.CreateValue(Inv_Layer_Names)

            'Set output parameters
            pParameter = pParamArray.Element(1)
            pParameterEdit = pParameter
            pDataType = pParameter.DataType
            pParameterEdit.Value = pDataType.CreateValue("GMLSF, " & FILE_STORAGE_PATH.Substring(0, FILE_STORAGE_PATH.LastIndexOf(".")) & ".gml")

            'Validate input parameters
            pGPMessages = pGPTool.Validate(pParamArray, True, Nothing)

            'Execute tool for at least inventory layers
            pGPTool.Execute(pParamArray, pProgressTracker, pGPEnvMgr, pGPMessages)
        End If           

    Catch ex As Exception
        Throw New CustomException(ex.Message, ex)
    Finally
        'Release resources           
        pGPMessages = Nothing
        pParameterEdit = Nothing
        pDataType = Nothing
        pParameterEdit = Nothing
        pParameter = Nothing
        pParamArray = Nothing
        pGPTool = Nothing
        pGPToolbox = Nothing
        pToolboxWorkspace = Nothing
        pToolboxWorkspaceFactory = Nothing
        pGPEnv_Extent = Nothing
        pGPEnv_CoordSys = Nothing
        pGPEnvMgr = Nothing
        pGPCOMHelper = Nothing
        pProgressTracker = Nothing
    End Try
End Sub

Xin chào, cảm ơn câu trả lời của bạn :) Có lẽ tôi đã xác định rằng tôi đang sử dụng arcMap 10. Từ tài nguyên này help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/. Có vẻ như FMEWorkspaceFactory đã bị xóa đi từ 9.3 -> 10.0. Bạn có biết nếu có bất kỳ lựa chọn thay thế nào để sử dụng FMEWorkspaceFactoryClass mà bạn đã chỉ định trong ví dụ của mình không? Trân trọng / larssj
user2847

Ồ ... tôi không biết rằng nó đã bị xóa. Nếu tôi không sai, thì hộp công cụ DI cũng sẽ không có sẵn ...
ujjwalesri

Ok, không có vấn đề bạn đời. Cảm ơn bạn đã giúp đỡ. Nếu tôi tìm thấy một giải pháp, tôi gửi nó ở đây. Điều duy nhất tôi có thể nghĩ đến bây giờ là "đằng sau hậu trường" và thêm các tệp fdl cần thiết để thêm các dịch vụ vào ArcView (Nếu đặt trong thư mục ArcView chính xác, chúng sẽ được tự động tải vào giao diện kết nối tương tác). Điều này vẫn sẽ dễ dàng hơn nhiều cho người dùng của tôi.
dùng2847
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.