Tüm kayıtları sorgulamak (> 1000) ve csv'ye nasıl dışa aktarılır?


13

Arcgis forumunda yayınladım ama hiç cevap alamadım. Birisi bana bunu nasıl çözeceğimi söyleyebilir mi?

Rüzgar hızı bilgileri ile 1 Ekim - 31 Aralık arasında bir araç takip kayıtlarınız olduğunu varsayalım. Tüm veriler coğrafi veri tabanına (sde-sqlserver) ve ArcGIS Server 10.1'e özellik katmanı olarak kaydedilir. Zaman kaydırıcısı, rüzgar hızı olan bir aracın yerlerini gösterir.

Kullanıcı bir zaman aralığını değiştirdiğinde (örn. 2 Ekim - 4 Ekim), ilk sorgu görevi (sayım için) aralıktaki özellik sayısını hesaplar. Genellikle iki günde bile 1000'den fazla sonuç vardır (örn. 1750) (Bu sınırı değiştirmek istemiyorum).

Tüm kayıtları elinde tutmak ama rüzgar hızı genel bir eğilim için güzel bir grafik yapmak için hala yeterli sayıda modülü (1/10) ile miktarı azaltmak için başka bir sorgu görevi (executeforIds) kullandım. Bununla birlikte, csv'de tüm bir veri kümesini indirmek için bir seçenek sunmak istiyorum (bu durumda 1750 satır)

Burada, zaman aralığı içinde özellik veri kümesini almak için findtask kullandım.

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, console.log2'de tanımlanmadı, ancak tüm csvdata (console.log1'de) konsolda veri gösteriyor. Sorun find.execute tamamlandı gibi görünüyor, bu yüzden setTimeout ekledim.

Bu işe yarıyor gibi gözüküyor ama zaman aralığını artırdığımda belli olmayacak.

Tüm kayıtları (1000 - 200.000) belirli bir zaman aralığında tutmak ve csv'ye aktarmak yine de var mı?

Yanıtlar:


6

Seçeneklerden biri, sistemin kayıtları size geri göndermesini sağlamaktır. Yalnızca 1000 için veri döndürmesine rağmen, tüm 1750 satırlar için kayıt numaralarını verecektir.

Kayıtların listesini aldığınızda (sıralanıp sıralanmadığından emin değilim) ilk 1000'i dışarı çekin, ardından ilk ve son NESNE KİMLERİNİ whereeclause'a ekleyin

OBJECTID>=firstobjectid and  OBJECTID<=lastobjectid

Gerektiği kadar tekrarlayın.


6

QueryTask kullanarak ve returnIdsOnly = true ayarı önerecekti .

Özellik kümesi yanıtında bulunan özellik sayısında bir sınır olsa da, kimlik dizisi yanıtında döndürülen nesne kimliği sayısında bir sınır olmadığını unutmayın. İstemciler, returnIdsOnly = true belirterek ve daha sonra nesne tanıtıcılarının alt kümeleri için özellik kümeleri isteyerek tüm sorgu uyumlu nesne kimliklerini almak için bundan yararlanabilir.

Bu Javascript api's QueryTask bulunabilir .

Ayrıca Silverlight API'sinin Sorgusunda da desteklenir .

Yerel SQL sunucusu uzamsal veri türlerini kullanıyorsanız ve sürüm oluşturmayı kullanmıyorsanız , şablonu başlangıç ​​noktası olarak kullanarak yalnızca bir Microsoft REST hizmeti yazmayı düşünebilirsiniz .


Bunu fark etmedim - güzel! İlk satırda, returnIdsOnly = true doğru mu demek istediniz?
awesomo

Üzgünüz, bu doğru, cevabımı şimdi değiştirdim.
Kirk Kuykendall

Teşekkürler Kirk. Sliverlight API'sinde "returnIdsOnly = true" tanıyordum, ancak bahsettiğiniz gibi Javascript api'de bulamadım. MS REST'i kontrol edeceğim.
user14693

5
  1. Noktalar ve çift özniteliklerle uğraşıyorsanız, özellikle de grafik oluşturmuyorsanız, hizmet kaydı sınırını 10k veya daha fazla artırabilirsiniz.

  2. Eşzamansız bir coğrafi işlem görevi yapabilir ve sunucudaki bir çıktı klasöründe oluşturulduktan sonra verileri alabilirsiniz.

  3. Eğer bir sipariş cümle ve sorgunuzda zaman atarsanız. Son kayıttaki zamanı okuyabilir ve bir sonraki kayıt kümesini o zamandan daha fazla elde edebilirsiniz. Zaman aralığınızın sonuna ulaşıncaya kadar devam edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.