Napisałem na forum arcgis, ale nigdy nie otrzymałem żadnej odpowiedzi. Czy ktoś może mi powiedzieć, jak to rozwiązać?
Załóżmy, że masz zapisy śledzenia pojazdu od 1 października do 31 grudnia z informacjami o prędkości wiatru. Wszystkie dane są zapisywane w geobazie (sde-sqlserver) i wyżej w ArcGIS Server 10.1 jako warstwa obiektów. Suwak czasu pokazuje położenie samochodu z prędkością wiatru.
Gdy użytkownik zmieni zakres czasu (np. 2 października - 4 października), pierwsze zapytanie (dla liczby) oblicz liczbę funkcji w tym zakresie. Zwykle jest więcej niż 1000 wyników, nawet dwa dni (np. 1750) (chociaż nie chcę zmieniać tego limitu).
Użyłem innego zadania zapytania (executeforIds), aby zachować wszystkie rekordy pod ręką, ale zmniejszyłem liczbę za pomocą modułu (1/10), który wciąż jest wystarczającą liczbą do stworzenia ładnego wykresu dla ogólnego trendu prędkości wiatru. Jednak chcę również zapewnić opcję pobrania całego zestawu danych w pliku csv (w tym przypadku 1750 wierszy)
Tutaj użyłem findtask do pobrania zestawu danych atrybutów w przedziale czasowym.
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));
Plik csvdata nie został zdefiniowany w pliku console.log2, chociaż wszystkie csvdata (w pliku console.log1) pokazują dane w konsoli. Wydaje się, że problem został zakończony po zakończeniu find.execute, więc dodałem setTimeout.
To wydaje się działać, ale kiedy zwiększę zakres czasowy, to oczywiście nie będzie.
Czy w ogóle można przechowywać wszystkie rekordy (1000–200 000) w określonym przedziale czasowym i eksportować do pliku csv?
źródło
Z pewnością możesz zwiększyć limit rekordów usług do 10k lub więcej, jeśli masz do czynienia z punktami i parami atrybutów - szczególnie jeśli nie generujesz grafiki.
Możesz wykonać asynchroniczne zadanie geoprzetwarzania i odebrać dane po wygenerowaniu w folderze wyjściowym na serwerze.
Jeśli rzucisz, jeśli zamówienie według klauzuli i czas w zapytaniu. Być może będziesz w stanie odczytać czas z ostatniego rekordu i uzyskać następny zestaw rekordów większy niż ten czas. Idź dalej, aż dotrzesz do końca zakresu czasu.
źródło