13 votos

¿Cómo consultar todos los registros (> 1000) y exportar a csv?

He publicado en arcgis foro pero nunca recibí ninguna respuesta. ¿Alguien puede decirme como solucionar esto?

Supongamos que usted tiene un vehículo de seguimiento de los registros de Oct.El 1 de diciembre. 31 con información de velocidad del viento. Todos los datos se guardan en la geodatabase (sde-sqlserver) y en ArcGIS for Server 10.1 como característica de la capa. Un deslizador de tiempo para mostrar la ubicación de un coche con la velocidad del viento.

Cuando un usuario cambia un rango de tiempo (por ejemplo. Oct.2 - Oct.4), la primera tarea de consulta (para contar) calcular el número de funciones dentro de la gama. Generalmente hay más de 1000 resultados incluso dos días (por ejemplo. 1750) (no quiero cambiar este límite).

He utilizado otra tarea de consulta (executeforIds) para mantener todos los registros en la mano, pero reducir la cantidad con el módulo (1/10), que es todavía un número suficiente para hacer un bonito gráfico de una tendencia general de la velocidad del viento. Sin embargo, también quiero ofrecer una opción para descargar todo un conjunto de datos en formato csv (en este caso 1750 filas)

Aquí, he utilizado findtask para recuperar atributo del conjunto de datos dentro del rango de tiempo.

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 no estaba definida en la consola.log2, a pesar de todos los csvdata (en la consola.log1) muestran los datos en la consola. El problema parece momento de encontrar.ejecutar completo, así que he añadido a setTimeout.

Esto parece funcionar, pero cuando puedo aumentar el rango de tiempo, no obviamente.

Es de todos modos hay que mantener todos los registros (1000 - 200,000) en un intervalo de tiempo específico y exportar a csv?

6voto

idursun Puntos 3648

Una de las opciones es que el sistema devuelva los registros a usted. Le dará los números de registro para todas las filas de 1750 aunque sólo devolverá los datos para 1000.

Al llegar la lista de registros (no estoy seguro si se ordenan) Saque el primer 1000, luego añadir los OBJECTIDs primeras y la últimas a la whereclause

OBJECTID>=firstobjectid and  OBJECTID<=lastobjectid

Repita tantas veces como sea necesario.

6voto

saint_groceon Puntos 2696

Yo iba a sugerir el uso de la QueryTask y configuración de returnIdsOnly=true.

Tenga en cuenta que si bien existe un límite en el número de funciones que se incluyen en el conjunto de características de la respuesta, no hay ningún límite en el número de objeto Id devuelto en la matriz de ID de respuesta. Los clientes pueden aprovechar esto para obtener todas las consultas conforme Identificadores de objeto especificando returnIdsOnly=true y, posteriormente, solicitar conjuntos de características para subconjuntos de Id de objeto.

Esto se puede encontrar en la api de Javascript de la QueryTask.

También se apoyó en el Silverlight de la API de Consulta.

Si está utilizando SQL server nativo espacial de los tipos de datos, y no el uso de control de versiones, se puede considerar sólo la escritura de Microsoft de un servicio REST con la plantilla como punto de partida.

5voto

Paul Hargreaves Puntos 1022
  1. Ciertamente se podría aumentar el servicio de registro de límite a 10k o más, si se trata de puntos y la pareja de atributos, especialmente si usted no está de generación de gráficos.

  2. Usted podría hacer una asincrónica tarea de geoprocesamiento y recoger los datos después de generado en una carpeta de salida en el servidor.

  3. Si usted lanza si una cláusula order by y el tiempo en su consulta. Usted podría ser capaz de leer la hora en el último registro y obtener el siguiente conjunto de registros de más tiempo. Seguir adelante hasta llegar al final de su rango de tiempo.

Pequeño ayudante para ArcGIS Server momento en que escribí, http://www.spatialexception.org/posts/arcgis-server-and-javascript-dates

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X