banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Tue 02 August 2011 16:14

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Bonjour,

Mon problème est assez simple :

Je cherche à récupérer les indices de Nearest Neighbor Index de plusieurs semis de points, renvoyés par l'outil Average Nearest Neighbor de la Toolbox Spatial Statistics Tools afin de les stocker et les utiliser dans la suite de mon programme VBA.

J'arrive à exécuter l'outil, mais je n'ai pas trouvé le moyen de stocker les valeurs calculées. Lorsque j'ajoute en paramètre la variable dont je veux récupérer la valeur en sortie, j'obtiens un message d'erreur. Si je n'envoie que les paramètre d'entrée, la fonction s'exécute mais ne renvoie rien.

Je pense que la solution est assez simple, mais je ne m'en sors pas !

Je vous joins l'extrait de mon code :

Code:

   Public Sub Macro()
        'Initialisation du GeoProcessor
        Dim GP As IGeoProcessor
        Set GP = New GeoProcessor
        GP.OverwriteOutput = True 

        'Ajout de la Toolbox
        GP.AddToolbox "C:\Program Files\ArcGIS\ArcToolBox\Toolboxes\Spatial Statistics Tools.tbx"
        
        'Déclaration des paramètres
        inFeatures = "C:\Dugrain\Stage\InterpolationSLSJ\Données\TotalDonneesV2.shp"
        distMethod = "Euclidean Distance"
        displayOutput = False
        Dim nnRatio As Double
                
        'Ajout des paramètres dans une variable
        Dim parameters As IVariantArray
        Set parameters = New VarArray
        parameters.Add (inFeatures)
        parameters.Add (distMethod)
        parameters.Add (displayOutput)
        parameters.Add (nnRatio)
        
        'Exécution de l'outil Average Nearest Neighbor
        GP.Execute "AverageNearestNeighbor", parameters, Nothing
                
        MsgBox "Fini !!"
        
    End Sub

Merci d'avance pour toute aide !

Vianney


Vianney Dugrain

Hors ligne

 

#2 Tue 02 August 2011 18:07

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Salut

Dans l'aide ArcGIS il y a un exemple écrit en Python :

nn_output = gp.AverageNearestNeighbor_stats(crime_data, "Euclidean Distance", "false", "#")
    nn_values = nn_output.split(";")
    print "The nearest neighbor index is: " + nn_values[0]
    print "The z score of the nearest neighbor index is: " + nn_values[1]
    print "The p-value of the nearest neighbor index is: " + nn_values[2]


Donc ici la fonction renvoie une chaine liant les 3 valeurs par un point virgule. Je ne sais pas trop ce qu'il faut attendre en VBA mais j’essaierai quand même un truc du genre

Code:

dim result as string
result = GP.Execute "AverageNearestNeighbor", inFeatures, distMethod , displayOutput

sans garantie hein, mon VBA est plutôt rouillé, d'ailleurs est-ce indispensable que ce script soit codé dans ce langage?

Hors ligne

 

#3 Tue 02 August 2011 18:16

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Merci pour cette suggestion.

J'avais essayé quelque chose de semblable, mais j'ai alors obtenu une erreur de compilation...

Mes commanditaires m'ont imposé le VBA, mais j'envisage tout de même d'essayer Python si je vois que je reste bloqué avec VB.

Merci pour votre aide en tout cas !


Vianney Dugrain

Hors ligne

 

#4 Tue 02 August 2011 19:04

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

VianneyD a écrit:

Mes commanditaires m'ont imposé le VBA,


Je suis curieux de connaitre leurs arguments !

Hors ligne

 

#5 Tue 02 August 2011 19:17

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Ils ne connaissent que VBA, tous leurs programmes sont écrits en VBA et ils me l'ont imposé en conséquence.

Cenpendant je ne pense pas qu'ils soient très à cheval sur cette spécification.


Vianney Dugrain

Hors ligne

 

#6 Wed 03 August 2011 12:15

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Il y a cette ressource page 5 ils montrent comment récupérer une valeur retournée. A tester...

Hors ligne

 

#7 Wed 03 August 2011 16:46

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Merci beaucoup !

En fait d'après ce document il faut déclarer la variable retounée en Variant, ce qui doit donner quelque chose de ce genre :

        Dim retParam As Variant
        retParam = GP.Execute("AverageNearestNeighbor", parameters, Nothing)

Seulement lorsque j'exécute ce script, le programme tourne mais j'obtiens un message d'erreur sur la deuxième ligne ("type mismatch")...

Je ne dois plus être très loin d'y arriver !


Vianney Dugrain

Hors ligne

 

#8 Wed 03 August 2011 17:42

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

OK, j'arrive à récupérer les valeurs dans un Variant :

Code:

        Dim retParam As IVariantArray
        Set retParam = New VarArray
        retParam.Add GP.Execute("AverageNearestNeighbor", parameters, Nothing)

Par contre, d'après le document ArcGis, la fonction renvoie un String, et lorsque j'effectue un VarType sur la valeur renvoyée, j'obtiens le code 13 qui correspond à un vbDataObject (???)

Je suis en train de voir comment je peux récupérer un String à partir de ça...


Vianney Dugrain

Hors ligne

 

#9 Wed 03 August 2011 22:35

VianneyD
Participant assidu
Date d'inscription: 30 May 2011
Messages: 153

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

OK, j'ai finalement réussi à récupérer les valeurs dans un String en utilisant cet exemple : http://support.esri.com/en/knowledgebas … tail/31110

Il fallait apparemment déclarer le géoprocessor en Objet et non en IGeoProcessor...

Code:

Public Sub Test()

  Dim inputName As String
  Dim dist As String
  inputName = "C:\Dugrain\Stage\InterpolationSLSJ\0.shp"
  dist = "Euclidean Distance"
  Dim pGP As Object
  Set pGP = CreateObject("esriGeoprocessing.GPDispatch.1")

  pGP.Toolbox = "C:\Program Files\ArcGIS\ArcToolBox\Toolboxes\Spatial Statistics Tools.tbx"
  
  On Error GoTo EH
  pGP.Workspace = filePath
  
  Dim result As Variant
  result = pGP.AverageNearestNeighbor(inputName, dist, False)
  
  MsgBox result
  
  Exit Sub
EH:
  MsgBox pGP.GetMessages(), vbOKOnly, "Test"
End Sub

Et ça fonctionne !
En espérant que mes errements pourront servir à d'autres !


Vianney Dugrain

Hors ligne

 

#10 Thu 04 August 2011 09:09

dominique.lys
Participant assidu
Date d'inscription: 5 Oct 2006
Messages: 473
Site web

Re: ArcGis 9.3 - Average Nearest Neighbor dans une macro VBA

Super ! Merci pour le suivi.

Hors ligne

 

Pied de page des forums

Powered by FluxBB