Ich habe im arcgis-Forum gepostet, aber keine Antwort bekommen. Kann mir jemand sagen, wie man das löst?
Angenommen, Sie haben einen Fahrzeug-Tracking-Datensatz vom 1. Oktober bis 31. Dezember mit Windgeschwindigkeitsinformationen. Alle Daten werden in der Geodatabase (sde-sqlserver) und in ArcGIS Server 10.1 als Feature-Layer gespeichert. Ein Zeitschieberegler zeigt die Positionen eines Autos mit Windgeschwindigkeit an.
Wenn ein Benutzer einen Zeitbereich ändert (z. B. 2. Oktober - 4. Oktober), berechnet die erste Abfrageaufgabe (für die Zählung) die Anzahl der Features innerhalb des Bereichs. Es gibt normalerweise mehr als 1000 Ergebnisse, sogar zwei Tage (z. B. 1750) (ich möchte dieses Limit jedoch nicht ändern).
Ich habe eine andere Abfragetask (executeforIds) verwendet, um alle Aufzeichnungen in der Hand zu halten, aber den Betrag mit dem Modul (1/10) zu reduzieren, der immer noch ausreicht, um ein schönes Diagramm für einen allgemeinen Trend der Windgeschwindigkeit zu erstellen. Ich möchte jedoch auch eine Option zum Herunterladen eines gesamten Datensatzes in csv (in diesem Fall 1750 Zeilen) bereitstellen.
Hier habe ich findtask verwendet, um einen Attributdatensatz innerhalb des Zeitbereichs abzurufen.
try {
//console.log(app.objIDs);
var attribs;
csvdata = "";
var find = new esri.tasks.FindTask("http://xyz.com/arcgis/rest/services/Realtime/Car_Wind_WM/MapServer");
var params = new esri.tasks.FindParameters();
params.layerIds = [0];
params.searchFields = ["OBJECTID"];
for (var i = 0; i < app.objIDs.length; i++) {
params.searchText = app.objIDs[i];
find.execute(params, function (results) {
attribs = results[0].feature.attributes;
csvdata += attribs.Date_Central + ',' + attribs.Longitude + "," + attribs.Latitude + "," + attribs.windspeed + "\n";
console.log(csvdata); //1
}, function (error) {
alert("Error");
});
}
} catch (error) {
alert("Change the time range first");
}
console.log(csvdata); //2
setTimeout(function () {
formatData(app.csvdata);
}, (3 * 1000));
csvdata war in console.log2 undefiniert, obwohl alle csvdata (in console.log1) Daten in console anzeigen. Das Problem scheint das Timing von find.execute abgeschlossen zu haben, also habe ich setTimeout hinzugefügt.
Das scheint zu funktionieren, aber wenn ich die Zeitspanne erhöhe, wird es nicht offensichtlich.
Gibt es überhaupt eine Möglichkeit, alle Aufzeichnungen (1000 - 200.000) in einem bestimmten Zeitraum zu speichern und nach csv zu exportieren?
quelle
Sie können das Serviceaufzeichnungslimit auf 10.000 oder mehr erhöhen, wenn Sie mit Punkten und Paarattributen arbeiten - insbesondere, wenn Sie keine Grafiken generieren.
Sie können eine asynchrone Geoverarbeitungsaufgabe ausführen und die Daten abrufen, nachdem sie in einem Ausgabeordner auf dem Server generiert wurden.
Wenn Sie eine Bestellung per Klausel und die Zeit in Ihre Anfrage werfen. Möglicherweise können Sie die Zeit im letzten Datensatz ablesen und die nächsten Datensätze abrufen, die größer als diese Zeit sind. Fahren Sie fort, bis Sie das Ende Ihrer Zeitspanne erreicht haben.
quelle