Bagaimana cara kueri semua catatan (> 1000) dan ekspor ke csv?

13

Saya diposting di forum arcgis tetapi tidak pernah mendapat jawaban. Adakah yang bisa memberitahu saya cara mengatasi ini?

Anggap Anda memiliki catatan pelacakan kendaraan mulai 1 Oktober hingga 31 Desember dengan informasi kecepatan angin. Semua data disimpan dalam geodatabase (sde-sqlserver) dan di ArcGIS Server 10.1 sebagai lapisan fitur. Penggeser waktu menunjukkan lokasi mobil dengan kecepatan angin.

Saat pengguna mengubah rentang waktu (mis. 2 Oktober - 4 Oktober), tugas kueri pertama (untuk hitungan) menghitung jumlah fitur dalam rentang tersebut. Biasanya ada lebih dari 1000 hasil bahkan dua hari (mis. 1750) (saya tidak ingin mengubah batas ini).

Saya menggunakan tugas kueri lain (executeforIds) untuk menyimpan semua catatan di tangan tetapi mengurangi jumlah dengan modulus (1/10) yang masih cukup banyak untuk membuat grafik yang bagus untuk tren keseluruhan kecepatan angin. Namun, saya juga ingin memberikan opsi untuk mengunduh seluruh dataset dalam csv (dalam hal ini 1750 baris)

Di sini, saya menggunakan findtask untuk mengambil dataset atribut dalam rentang waktu.

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 tidak terdefinisi di console.log2, meskipun semua csvdata (di console.log1) menunjukkan data di konsol. Masalahnya tampaknya waktu find.execute selesai, jadi saya menambahkan setTimeout.

Ini tampaknya berhasil tetapi ketika saya meningkatkan rentang waktu, itu tidak akan jelas.

Apakah ada pula untuk menyimpan semua catatan (1000 - 200.000) dalam rentang waktu tertentu dan ekspor ke csv?

pengguna14693
sumber

Jawaban:

6

Salah satu opsi adalah agar sistem mengembalikan catatan kepada Anda. Ini akan memberi Anda nomor catatan untuk semua 1.750 baris meskipun hanya akan mengembalikan data untuk 1000.

Ketika Anda mendapatkan daftar catatan (saya tidak yakin apakah itu diurutkan) tarik 1000 pertama, kemudian tambahkan OBJECTID pertama dan terakhir ke whereclause

OBJECTID>=firstobjectid and  OBJECTID<=lastobjectid

Ulangi sebanyak yang diperlukan.

mhoran_psprep
sumber
6

Saya akan menyarankan menggunakan QueryTask dan mengatur returnIdsOnly = true .

Perhatikan bahwa meskipun ada batasan jumlah fitur yang termasuk dalam respons set fitur, tidak ada batasan pada jumlah ID objek yang dikembalikan dalam respons array ID. Klien dapat memanfaatkan ini untuk mendapatkan semua kueri yang sesuai dengan ID objek dengan menentukan returnIdsOnly = true dan kemudian meminta set fitur untuk subset ID objek.

Ini dapat ditemukan di QueryTask Javascript api .

Ini juga didukung di Kueri Silverlight API .

Jika Anda menggunakan tipe data spasial SQL server asli, dan tidak menggunakan versi, Anda dapat mempertimbangkan hanya menulis layanan Microsoft REST menggunakan templat sebagai titik awal.

Kirk Kuykendall
sumber
Tidak menyadari ini - bagus! Di baris pertama, maksud Anda returnIdsOnly = benar bukan?
awesomo
Ups, itu benar, saya mengubah jawaban saya sekarang.
Kirk Kuykendall
Kirk terima kasih Saya tahu "returnIdsOnly = true" di Sliverlight API tetapi saya tidak dapat menemukan di Javascript api seperti yang Anda sebutkan. Saya akan memeriksa MS REST.
user14693
5
  1. Anda tentu dapat meningkatkan batas catatan layanan hingga 10rb atau lebih jika Anda berurusan dengan atribut titik dan pasangan - terutama jika Anda tidak menghasilkan grafik.

  2. Anda dapat membuat tugas geoproses yang tidak sinkron dan mengambil data setelah dibuat dalam folder keluaran di server.

  3. Jika Anda melempar jika pesanan dengan klausa dan waktu dalam permintaan Anda. Anda mungkin dapat membaca waktu di catatan terakhir dan mendapatkan kumpulan catatan berikutnya lebih besar dari waktu itu. Teruskan sampai Anda mencapai akhir rentang waktu Anda.

awesomo
sumber