J'ai posté sur le forum arcgis mais je n'ai jamais eu de réponse. Quelqu'un peut-il me dire comment résoudre ce problème?
Supposons que vous ayez un dossier de suivi de véhicule du 1er octobre au 31 décembre avec des informations sur la vitesse du vent. Toutes les données sont enregistrées dans la géodatabase (sde-sqlserver) et mises à jour dans ArcGIS Server 10.1 en tant que couche d'entités. Un curseur temporel indique l'emplacement d'une voiture avec la vitesse du vent.
Lorsqu'un utilisateur modifie une plage de temps (par exemple, du 2 octobre au 4 octobre), la première tâche de requête (pour le comptage) calcule le nombre de fonctionnalités dans la plage. Il y a généralement plus de 1000 résultats, même sur deux jours (par exemple 1750) (je ne veux cependant pas modifier cette limite).
J'ai utilisé une autre tâche de requête (executeforIds) pour garder tous les enregistrements en main, mais réduire le montant avec le module (1/10), ce qui est encore assez pour créer un joli graphique pour une tendance générale de la vitesse du vent. Cependant, je veux également fournir une option pour télécharger un ensemble de données complet en csv (dans ce cas 1750 lignes)
Ici, j'ai utilisé findtask pour récupérer l'ensemble de données d'attribut dans la plage de temps.
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 n'était pas défini dans console.log2, bien que tous les csvdata (dans console.log1) affichent des données dans la console. Le problème semble que le timing de find.execute soit terminé, j'ai donc ajouté setTimeout.
Cela semble fonctionner mais quand j'augmente la plage de temps, ce ne sera évidemment pas le cas.
Est-il possible de conserver tous les enregistrements (1000 - 200 000) dans une plage de temps spécifique et d'exporter vers csv?
Vous pouvez certainement augmenter la limite d'enregistrement de service à 10 000 ou plus si vous traitez avec des points et des attributs de couple - en particulier si vous ne générez pas de graphiques.
Vous pouvez créer une tâche de géotraitement asynchrone et récupérer les données une fois générées dans un dossier de sortie sur le serveur.
Si vous jetez si une clause order by et l'heure dans votre requête. Vous pourrez peut-être lire l'heure dans le dernier enregistrement et obtenir le prochain ensemble d'enregistrements supérieur à cette heure. Continuez jusqu'à ce que vous atteigniez la fin de votre plage horaire.
la source