Mehr

Abrufen von Geoverarbeitungsergebnissen in der ArcGIS JavaScript API

Abrufen von Geoverarbeitungsergebnissen in der ArcGIS JavaScript API


Ich führe ein Geoverarbeitungsskript in einem ArcGIS JavaScript API Map Viewer aus und es funktioniert, bis ich versuche, die Ausgabeparameter des Jobs zu lesen.

Mein Skript:

Funktion ExtractModel (Ergebnisse) { var params = { "ModelName": ModelName }; // zuvor definierte Variable // Geoverarbeitungsservice ausführen, um GDB zu exportieren, Ergebnisse herunterladen var gp = new Geoprocessor("http://myserver/arcgis/rest/services/Test4Custom/GPServer/Custom"); gp.setUpdateDelay(5000); // Status alle 5 Sekunden prüfen gp.submitJob(params, statusDone, statusCallback, errorBack); } function errorBack(jobInfo) { alert.window("Fehler im Geoverarbeitungsskript aufgetreten.") console.log("Status: " + gpStatus); } function statusCallback(jobInfo) { console.log("Status: " + gpStatus + " -- Fortfahren… "); } function statusDone(jobInfo) { console.log("Geoverarbeitung abgeschlossen"); console.log("Status: " + gpStatus); console.log("Job-ID" + jobInfo.jobId); gp.getResultData(jobInfo.jobId, "Output_File", downloadResult, errorBack); } Funktion downloadResult(Ergebnis) { console.log("Ergebnis anzeigen"); Konsole.log(Ergebnis.Wert); console.log(result.dataType); }

Die Geoverarbeitungsaufgabe wird korrekt ausgeführt und das Viewer-Skript wird ausgeführt, bis diegp.getResultDataLinie. Es kommt nicht in diedownloadResult()Funktion, und ich erhalte diesen Fehler in der Konsole:

TypeError: c ist keine Funktion(… ) "TypeError: c ist keine Funktion

Zeigt dies ein Problem mit meiner Syntax beim Aufrufen an?downloadResult(), oder etwas anderes?

Hinweis: Der Ausgabeparameter ist tatsächlichAusgabe_Datei, und enthält bei der Ausführung eine Zeichenfolge. Beispiel:

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

Hier ist eine Kopie eines Beispiels, das ich verwende, um eine Datei als Ausgabe von einem GPS-Dienst abzurufen, um sie zum Download bereitzustellen. (Es greift Text von einem Benutzer und fügt ihn in eine Textdatei ein und gibt dann die Textdatei zurück. Es gibt eine 'echte' Dateiausgabe, keine Zeichenfolge). Ich glaube nicht, dass es zu 100% das ist, was Sie wollen, aber es führt Sie hoffentlich auf den richtigen Weg…

Javascript

Funktion Submit() { //Nachrichten zurücksetzen dojo.byId('downURL').innerHTML= ""; //Go… var inputText = dojo.byId('inText').value; var params = {'Input_Text': inputText }; Konsole.log (Parameter); gp_R.submitJob (params, gpJobComplete, gpJobStatus, Funktion (Fehler) { Warnung (Fehler); }); } Funktion gpJobComplete(jobInfo) { if(jobInfo.jobStatus == "esriJobFailed") { dojo.byId('downURL').innerHTML = "Fehler beim Generieren der Textdatei"; } else if (jobInfo.jobStatus == "esriJobSucceeded") { gp_R.getResultData(jobInfo.jobId,"Output_Text_File", downloadFile); } } Funktion downloadFile (outputFile) { var theurl = outputFile.value.url; dojo.byId('downURL').innerHTML = "Datei herunterladen (Rechtsklick, Speichern unter)"; }

HTML-Text

 

Ich würde die Funktion downloadResult in statusDone einfügen.

function statusDone(jobInfo) { var downloadResult = function(result) { console.log("Ergebnis anzeigen"); Konsole.log(Ergebnis.Wert); console.log(result.dataType); } console.log("Geoverarbeitung abgeschlossen"); console.log("Status: " + gpStatus); console.log("Job-ID" + jobInfo.jobId); gp.getResultData(jobInfo.jobId, "Output_File", downloadResult, errorBack); }

Wenn ich mich nicht irre, hat Ihre "Output_File" "esriGPParameterDirectionOutput" als Richtung in Ihrem GP-Dienst. Und Sie möchten den Wert gemäß Ihrem Jobstatus abrufen. Ich habe auch den gleichen Fehler bekommen, aber ich habe den Weg herausgefunden. Sie können eines tun. Siehe https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest oder https://www.w3schools.com/js/js_ajax_http.asp für XMLHttpRequest().

Funktion 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; (Wenn Sie ein GP-Dienst sind, ist er gesichert, sonst müssen Sie ihn nicht schreiben) xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.status == 200) { var result = JSON.parse(xhr.responseText ); alert(result.value); } }; xhr.senden(); }