सभी रिकॉर्ड (> 1000) और सीएसवी को निर्यात कैसे करें?


13

मैंने आर्कगिस फोरम में पोस्ट किया लेकिन कभी कोई जवाब नहीं मिला। क्या कोई मुझे बता सकता है कि इसे कैसे हल किया जाए?

मान लें कि आपके पास हवा की गति की जानकारी के साथ अक्टूबर से 31 दिसंबर तक एक वाहन ट्रैकिंग रिकॉर्ड है। सभी डेटा को जियोडेटाबेस (sde-sqlserver) और आर्कजीआईएस सर्वर 10.1 में फीचर लेयर के रूप में सहेजा गया है। एक समय स्लाइडर हवा की गति के साथ एक कार के स्थानों को दिखाता है।

जब कोई उपयोगकर्ता समय-सीमा (जैसे। Oct.2 - Oct.4) बदलता है, तो पहले क्वेरी कार्य (गणना के लिए) सीमा के भीतर सुविधाओं की संख्या की गणना करता है। आमतौर पर दो दिन (जैसे 1750) भी 1000 से अधिक परिणाम हैं (मैं इस सीमा को हालांकि बदलना नहीं चाहता)।

मैंने सभी रिकॉर्डों को हाथ में रखने के लिए एक और क्वेरी टास्क (एक्ज़ामेन्फोर्ड्स) का इस्तेमाल किया लेकिन मापांक (1/10) के साथ राशि को कम कर दिया जो अभी भी हवा की गति के समग्र रुझान के लिए एक अच्छा चार्ट बनाने के लिए पर्याप्त संख्या है। हालाँकि, मैं सीएसवी (इस मामले में 1750 पंक्तियों में) एक संपूर्ण डेटासेट डाउनलोड करने का विकल्प प्रदान करना चाहता हूं।

यहाँ, मैंने टाइम-रेंज के भीतर विशेषता डेटासेट को पुनः प्राप्त करने के लिए खोजक का उपयोग किया।

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));

सीएसवीडेटा कंसोल.लोग 2 पर अपरिभाषित था, हालांकि सभी सीएसवाडेटा (कंसोल.लोग 1) कंसोल में डेटा दिखाते हैं। समस्या find.execute के पूरा होने का समय लगता है, इसलिए मैंने setTimeout जोड़ा।

यह काम लगता है, लेकिन जब मैं समय-सीमा बढ़ाता हूं, तो यह स्पष्ट रूप से नहीं होगा।

वैसे भी सभी रिकॉर्ड (1000 - 200,000) को एक विशिष्ट समय सीमा में रखने और सीएसवी को निर्यात करने के लिए है?

जवाबों:


6

विकल्पों में से एक यह है कि सिस्टम आपको रिकॉर्ड वापस कर दे। यह आपको सभी 1750 पंक्तियों के लिए रिकॉर्ड नंबर देगा, भले ही यह केवल 1000 के लिए डेटा वापस करेगा।

जब आप रिकॉर्ड की सूची प्राप्त करते हैं (मुझे यकीन नहीं है कि अगर वे छांटे गए हैं) पहले 1000 को बाहर निकालते हैं, तो पहले और आखिरी ओबीजेक्टिड्स को व्हाइक्लॉज में जोड़ें

OBJECTID>=firstobjectid and  OBJECTID<=lastobjectid

आवश्यकतानुसार कई बार दोहराएं।


6

मैं QueryTask का उपयोग करने और returnIdsOnly = true सेट करने का सुझाव देने जा रहा था ।

ध्यान दें कि जब सुविधा सेट प्रतिक्रिया में शामिल सुविधाओं की संख्या पर सीमा होती है, तो आईडी सरणी प्रतिक्रिया में लौटाए गए ऑब्जेक्ट आईडी की संख्या पर कोई सीमा नहीं होती है। ग्राहक रिटर्न आईडी ऑब्जेक्ट को निर्दिष्ट करके सभी क्वेरी के अनुरूप ऑब्जेक्ट आईडी प्राप्त करने के लिए इसका फायदा उठा सकते हैं = सही और बाद में ऑब्जेक्ट आईडी के सबसेट के लिए सुविधा सेट का अनुरोध कर रहे हैं।

यह जावास्क्रिप्ट एपि के क्वेरीटस्क में पाया जा सकता है ।

यह सिल्वरलाइट एपीआई के क्वेरी में भी समर्थित है ।

यदि आप मूल SQL सर्वर स्थानिक डेटाटिप्स का उपयोग कर रहे हैं, और संस्करण का उपयोग नहीं कर रहे हैं, तो आप केवल प्रारंभिक बिंदु के रूप में टेम्पलेट का उपयोग करके Microsoft REST सेवा लिखने पर विचार कर सकते हैं ।


यह एहसास नहीं था - अच्छा! पहली पंक्ति में, आपका मतलब था returnIdsOnly = true सही?
awesomo

उफ़, यह सच है, मैंने अपना जवाब अब बदल दिया है।
कर्क कुक्केंडल

धन्यवाद किर्क मैं Sliverlight API में "returnIdsOnly = true" जानता था, लेकिन जैसा कि आपने बताया है कि मैं जावास्क्रिप्ट एपीआई में नहीं मिला। मैं एमएस रीस्ट की जांच करूंगा।
user14693

5
  1. यदि आप अंक और युगल विशेषताओं के साथ काम कर रहे हैं, तो आप निश्चित रूप से सेवा रिकॉर्ड सीमा को 10k या अधिक तक बढ़ा सकते हैं - खासकर यदि आप ग्राफिक्स नहीं बना रहे हैं।

  2. आप एक एसिंक्रोनस जियोप्रोसेसिंग कार्य कर सकते हैं और सर्वर पर आउटपुट फ़ोल्डर में उत्पन्न होने के बाद डेटा उठा सकते हैं।

  3. यदि आप खंड द्वारा एक आदेश और अपनी क्वेरी में समय फेंक देते हैं। आप पिछले रिकॉर्ड में समय पढ़ सकते हैं और उस समय से अधिक रिकॉर्ड का अगला सेट प्राप्त कर सकते हैं। जब तक आप अपनी समय सीमा के अंत तक नहीं पहुँचते तब तक चलते रहें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.