#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
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