Eu postei no fórum arcgis, mas nunca recebi nenhuma resposta. Alguém pode me dizer como resolver isso?
Suponha que você tenha um registro de rastreamento de veículos de 1º a 31 de dezembro com informações sobre a velocidade do vento. Todos os dados são salvos no geodatabase (sde-sqlserver) e no ArcGIS Server 10.1 como camada de recurso. Um controle deslizante de tempo mostra a localização de um carro com velocidade do vento.
Quando um usuário altera um intervalo de tempo (por exemplo, 2 de outubro a 4 de outubro), a primeira tarefa de consulta (por contagem) calcula o número de recursos dentro do intervalo. Geralmente, existem mais de 1000 resultados até dois dias (por exemplo, 1750) (embora não queira alterar esse limite).
Usei outra tarefa de consulta (executeforIds) para manter todos os registros em mãos, mas reduzi a quantidade com o módulo (1/10), que ainda é o número suficiente para fazer um bom gráfico para uma tendência geral da velocidade do vento. No entanto, também quero fornecer uma opção para baixar um conjunto de dados inteiro em csv (neste caso, 1750 linhas)
Aqui, usei o findtask para recuperar o conjunto de dados de atributos dentro do intervalo de tempo.
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));
O csvdata não foi definido em console.log2, embora todos os csvdata (no console.log1) mostrem dados no console. O problema parece que o tempo de find.execute foi concluído, então eu adicionei setTimeout.
Isso parece funcionar, mas quando eu aumento o intervalo de tempo, obviamente não funcionará.
Existe uma maneira de manter todos os registros (1000 - 200.000) em um intervalo de tempo específico e exportar para csv?
fonte
Certamente, você pode aumentar o limite de registros de serviço para 10k ou mais se estiver lidando com pontos e dois atributos - principalmente se não estiver gerando gráficos.
Você pode fazer uma tarefa de geoprocessamento assíncrono e coletar os dados depois de gerados em uma pasta de saída no servidor.
Se você jogar se uma ordem por cláusula e o tempo em sua consulta. Você pode ler a hora no último registro e obter o próximo conjunto de registros maior que esse tempo. Continue até chegar ao final do seu período.
fonte