ArcMapアドイン-プログラムによる相互運用接続の追加


10

現在、ArcMap-.Netフレームワークを使用するArcViewのアドインを構築しています。

ArcMapとアドインのユーザーは、WFSサービスから公開されたデータにアクセスする必要があります。

Interoperability Connectionsインターフェイスを介してWFSサービスを手動で追加できることを認識しています

しかし、これらのWFSサービスをプログラムで追加することは可能ですか?(可能性は-私のユーザーはこれらを手動で追加するのが難しいと感じるでしょう)

もしそうなら、どうすればそれができるでしょうか?

この件に関する情報は見つかりません。


1
パブリックWFSサイトへのURLはありますか?もしそうなら、それを投稿してください。そうすれば、回答に含める前にコードをテストできます。
カークカイケンダル

こんにちは、公開URLを投稿できません。
user2847

1
こんにちは@ user2847、これに対する解決策を見つけたことがありますか?ありがとう
pvdev 14

回答:


1

残念ながら、クラスによって動的にリクエストを行う方法はありません。fdl-fileを介してプログラムする必要があります。サービス(WFSなど)を追加するには、以下のコードを使用できます。

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

乾杯!

PS:IWFSServerインターフェイスを使用してみましたか?以前のプロジェクトの1つでDI機能を使用して、QuickExportを使用してデータをGML形式にエクスポートしましたQuickImportを使用して、ソースとして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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.