Suite

Récupération des résultats du géotraitement dans l'API JavaScript ArcGIS

Récupération des résultats du géotraitement dans l'API JavaScript ArcGIS


J'exécute un script de géotraitement dans une visionneuse de carte API JavaScript ArcGIS, et cela fonctionne jusqu'à ce que j'essaie de lire le paramètre de sortie de la tâche.

Mon scénario :

function extractModel(results) { var params = { "ModelName": ModelName }; // variable définie précédemment // exécuter le service de géotraitement pour exporter GDB, télécharger les résultats var gp = new Geoprocessor("http://myserver/arcgis/rest/services/Test4Custom/GPServer/Custom"); gp.setUpdateDelay(5000); // vérifie l'état toutes les 5 secondes gp.submitJob(params, statusDone, statusCallback, errorBack); } function errorBack(jobInfo) { alert.window("Erreur rencontrée dans le script de géotraitement.") console.log("Status : " + gpStatus); } function statusCallback(jobInfo) { console.log("Status: " + gpStatus + " -- Continuing… "); } fonction statusDone(jobInfo) { console.log("géotraitement terminé"); console.log("Status : " + gpStatus); console.log("ID ​​de travail " + infotravail.jobId); gp.getResultData(jobInfo.jobId, "Output_File", downloadResult, errorBack); } function downloadResult(result) { console.log("affichage du résultat"); console.log(result.value); console.log(result.dataType); }

La tâche de géotraitement s'exécute correctement et le script de la visionneuse s'exécute jusqu'à ce que lagp.getResultDataligne. Il ne s'agit pas d'entrer dans ledownloadRésultat()fonction, et j'obtiens cette erreur dans la console :

TypeError : c n'est pas une fonction (… ) "TypeError : c n'est pas une fonction

Cela indique-t-il un problème avec ma syntaxe lors de l'appeldownloadRésultat(), ou autre chose?

Remarque : le paramètre de sortie est bienFichier de sortie, et contient une chaîne lors de son exécution. Exemple:

{ "paramName": "Output_File", "dataType": "GPString", "value": "c:arcgisserverdirectoriesarcgisjobs	est4custom_gpserverje47fc8d361064c9e86237f397a873118scratchData_SALLEY_20151215.gdb" }

Voici un copier-coller d'un exemple que j'utilise pour obtenir un fichier en sortie d'un service gp afin de le rendre disponible en téléchargement. (Il récupère le texte d'un utilisateur et l'insère dans un fichier texte, puis renvoie le fichier texte. Il génère un "vrai" fichier de sortie, pas une chaîne). Je ne pense pas que ce soit à 100% ce que vous voulez, mais j'espère qu'il vous mènera sur la bonne voie…

javascript

function soumettre() { // réinitialiser les messages dojo.byId('downURL').innerHTML= ""; //Aller… var inputText = dojo.byId('inText').value; var params = {'Input_Text': inputText }; console.log(params); gp_R.submitJob(params, gpJobComplete, gpJobStatus, function(error){ alert(error); }); } function gpJobComplete(jobInfo) { if(jobInfo.jobStatus == "esriJobFailed") { dojo.byId('downURL').innerHTML = "Impossible de générer le fichier texte" ; } else if (jobInfo.jobStatus == "esriJobSucceeded") { gp_R.getResultData(jobInfo.jobId,"Output_Text_File", downloadFile); } } function downloadFile(outputFile) { var theurl = outputFile.value.url; dojo.byId('downURL').innerHTML = "Télécharger le fichier (clic droit, enregistrer sous)"; }

corps html

 

Je mettrais la fonction downloadResult dans statusDone.

function statusDone(jobInfo) { var downloadResult = function(result) { console.log("affichage du résultat"); console.log(result.value); console.log(result.dataType); } console.log("géotraitement terminé"); console.log("Status : " + gpStatus); console.log("ID ​​de travail " + infotravail.jobId); gp.getResultData(jobInfo.jobId, "Output_File", downloadResult, errorBack); }

Si je ne me trompe pas, votre "Output_File" a "esriGPParameterDirectionOutput" comme direction dans votre service GP. Et vous voulez récupérer de la valeur selon le statut de votre travail. J'obtenais également la même erreur, mais j'ai trouvé le chemin. Vous pouvez faire une chose. Veuillez vous référer à https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest ou https://www.w3schools.com/js/js_ajax_http.asp pour XMLHttpRequest().

function statusDone(jobInfo) { gp.getResultData(jobInfo.jobId, "Output_File", downloadResult, errorBack); var xhr = new XMLHttpRequest(); xhr.open("GET", "http://myserver/arcgis/rest/services/Test4Custom/GPServer/Custom/jobs/"+jobInfo.jobId+"/results/Output_File?f=pjson", true); xhr.withCredentials = true; (si vous êtes le service GP est sécurisé sinon pas besoin de l'écrire) xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { var result = JSON.parse(xhr.responseText ); alert(result.value); } } ; xhr.send(); }

Voir la vidéo: Recuperer les résultats dun Google forms et les trier