ArcMap Addin - Interoperabilitätsverbindung programmgesteuert hinzufügen

10

Ich erstelle derzeit ein Add-In für ArcMap - ArcView mithilfe des .NET-Frameworks.

Der Benutzer von ArcMap und des Add-Ins sollte auf Daten zugreifen, die von WFS-Diensten veröffentlicht wurden.

Mir ist bekannt, dass es möglich ist, WFS- Dienste manuell über die Interoperability Connections-Schnittstelle hinzuzufügen .

Ist es jedoch möglich, diese WFS-Dienste programmgesteuert hinzuzufügen? (Wahrscheinlich haben meine Benutzer Schwierigkeiten, diese manuell hinzuzufügen.)

Und wenn ja, wie könnte es gemacht werden?

Ich kann anscheinend keine Informationen zu diesem Thema finden.

user2847
quelle
1
Haben Sie eine URL zu einer öffentlichen WFS-Site? Wenn ja, posten Sie es. Auf diese Weise können Benutzer ihren Code testen, bevor sie ihn in eine Antwort aufnehmen.
Kirk Kuykendall
Hallo, ich kann keine öffentliche URL veröffentlichen.
user2847
1
Hallo @ user2847, hast du jemals eine Lösung dafür gefunden? Danke
pvdev

Antworten:

1

Leider gibt es keine Möglichkeit, Anforderungen einer Klasse dynamisch zu stellen. Sie müssen es über die fdl-Datei programmieren. Um einen Dienst (wie WFS) hinzuzufügen, können Sie den folgenden Code verwenden.

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

Prost!

PS: Haben Sie versucht, die IWFSServer- Schnittstelle zu verwenden? Ich habe die DI-Funktionalität in einem meiner vorherigen Projekte verwendet, um Daten mit QuickExport in das GML-Format zu exportieren . Sie können versuchen, den QuickImport zu verwenden und WFS als Quelle auszuwählen. Ich nehme den QuickExport-Code als Referenz ...

    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
ujjwalesri
quelle
Hallo, danke für Ihre Antwort :) Ich hätte wahrscheinlich angeben sollen, dass ich arcMap 10 verwende. Aus dieser Ressource help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/… Es scheint, dass die FMEWorkspaceFactory entfernt wurde von 9,3 -> 10,0. Wissen Sie, ob es Alternativen zur Verwendung der FMEWorkspaceFactoryClass gibt, die Sie in Ihrem Beispiel angegeben haben? Mit
freundlichen
Ohh ... ich wusste nicht, dass es entfernt wurde. Wenn ich mich nicht irre, wäre die DI-Toolbox auch nicht verfügbar ...
ujjwalesri
Ok, kein Problem Kumpel. Danke für Ihre Hilfe. Wenn ich eine Lösung finde, poste ich sie hier. Das einzige, woran ich jetzt denken kann, ist, hinter die Kulissen zu gehen und die fdl-Dateien hinzuzufügen, die zum Hinzufügen der Dienste zu ArcView erforderlich sind (Wenn diese in das richtige ArcView-Verzeichnis gestellt werden, sollten diese automatisch in die Interoperabilitätsverbindungsschnittstelle geladen werden). Dies wäre für meine Benutzer noch viel einfacher.
user2847