ArcMap Addin-프로그래밍 방식으로 상호 운용성 연결 추가


10

현재 .Net 프레임 워크를 사용하여 ArcMap-ArcView 용 추가 기능을 작성 중입니다.

ArcMap 및 애드 인 사용자는 WFS 서비스에서 게시 된 데이터에 액세스해야합니다.

Interoperability Connections 인터페이스 를 통해 WFS 서비스를 수동으로 추가 할 수 있다는 것을 알고 있습니다 .

그러나 이러한 WFS 서비스를 프로그래밍 방식으로 추가 할 수 있습니까? (기회는-사용자가 수동으로 추가하기가 어렵다는 것을 알게 될 것입니다)

그렇다면 어떻게 할 수 있습니까?

이 주제에 대한 정보를 찾을 수 없습니다.


1
공개 WFS 사이트에 대한 URL이 있습니까? 그렇다면 계속해서 게시하십시오. 그렇게하면 사람들이 코드를 답변에 포함시키기 전에 코드를 테스트 할 수 있습니다.
커크 Kuykendall

안녕하세요, 공개 URL (sry mate)을 게시 할 수 없습니다.
user2847

1
@ user2847 님 안녕하세요, 이것에 대한 해결책을 찾으셨습니까? 감사합니다
pvdev

답변:


1

불행히도 클래스별로 요청을 동적으로 만들 수있는 방법이 없습니다. fdl 파일을 통해 프로그래밍해야합니다. WFS와 같은 서비스를 추가하려면 아래 코드를 사용하십시오.

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

건배!

PS : IWFSServer 인터페이스 를 사용해 보셨습니까 ? 이전 프로젝트 중 하나에서 DI 기능을 사용하여 QuickExport를 사용하여 데이터를 GML 형식으로 내보냈습니다 . 빠른 가져 오기를 사용 하고 소스로 WFS를 선택할 수 있습니다 . 참조를 위해 QuickExport 코드를 사용하고 있습니다 ...

    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

안녕하세요, 감사는 당신의 대답 :) 위해 나는 아마 내가이 자원에서 ArcMap의 (10)를 사용하고 있음을 지정해야 help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/... FMEWorkspaceFactory가 제거 된 것으로 보인다 9.3에서-> 10.0으로 증가 예제에서 지정한 FMEWorkspaceFactoryClass 사용에 대한 대안이 있는지 알고 있습니까? 안부 / larssj
user2847

오우 ...이 제거되었는지 몰랐다. 내가 잘못 아니에요 경우, DI 도구 상자 ... 중 하나를 사용할 수없는 것
ujjwalesri

좋아, 문제가없는 친구. 당신의 도움을 주셔서 감사합니다. 해결책을 찾으면 여기에 게시하십시오. 내가 지금 생각할 수있는 유일한 것은 '장면'으로 가서 ArcView에 서비스를 추가하는 데 필요한 fdl 파일을 추가하는 것입니다 (올바른 ArcView 디렉토리에 넣으면 상호 운용성 연결 인터페이스에 자동으로로드되어야 함). 이것은 여전히 ​​내 사용자에게는 훨씬 쉬울 것입니다.
user2847 2016
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.