Componente aggiuntivo ArcMap: consente di aggiungere una connessione di interoperabilità a livello di codice


10

Attualmente sto costruendo un componente aggiuntivo per ArcMap - ArcView utilizzando il framework .Net.

L'utente di ArcMap e del componente aggiuntivo deve accedere ai dati pubblicati dai servizi WFS.

Sono consapevole che è possibile aggiungere manualmente servizi WFS tramite l' interfaccia Interoperability Connections .

Ma è possibile aggiungere questi servizi WFS a livello di codice? (è probabile che i miei utenti troveranno difficile aggiungerli manualmente)

E se lo è, come potrebbe essere fatto?

Non riesco a trovare alcuna informazione su questo argomento.


1
Hai un URL a un sito WFS pubblico? In tal caso, vai avanti e pubblicalo. In questo modo le persone possono testare il proprio codice prima di includerlo in una risposta.
Kirk Kuykendall,

Salve, non posso pubblicare un amico pubblico.
user2847

1
Ciao @ user2847, hai mai trovato una soluzione per questo? Grazie
pvdev il

Risposte:


1

Sfortunatamente non c'è modo di fare richieste dinamiche da una classe. Devi programmarlo tramite il file fdl. Per aggiungere un servizio (come WFS) è possibile utilizzare il codice seguente.

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

Saluti!

PS: hai provato a utilizzare l' interfaccia IWFSServer ? Ho usato la funzionalità DI in uno dei miei precedenti progetti per esportare dati in formato GML usando QuickExport . Puoi provare a utilizzare QuickImport e selezionare WFS come origine. Sto ottenendo il codice QuickExport come riferimento ...

    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

Ciao, grazie per la risposta :) Probabilmente avrei dovuto specificare che sto usando arcMap 10. Da questa risorsa help.arcgis.com/en/sdk/10.0/arcobjects_net/conceptualhelp/… Sembrerebbe che FMEWorkspaceFactory sia stato rimosso passando da 9.3 -> 10.0. Sai se ci sono alternative all'utilizzo di FMEWorkspaceFactoryClass che hai specificato nel tuo esempio? Cordiali saluti / larssj
user2847

Ohh ... Non sapevo che fosse stato rimosso. Se non sbaglio, anche la cassetta degli attrezzi DI non sarebbe disponibile ...
ujjwalesri,

Ok, nessun problema amico. Grazie per l'aiuto. Se trovo una soluzione, la pubblico qui. L'unica cosa a cui riesco a pensare ora è "dietro le quinte" e aggiungere i file fdl necessari per aggiungere i servizi ad ArcView (se inseriti nella directory ArcView corretta, questi dovrebbero essere caricati automaticamente nell'interfaccia delle connessioni di interoperabilità). Questo sarebbe ancora molto più semplice per i miei utenti.
user2847
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.