इमेज के किसी हिस्से के आंकड़े

reduceRegion

ee.Image के किसी क्षेत्र में पिक्सल वैल्यू के आंकड़े पाने के लिए, image.reduceRegion() का इस्तेमाल करें. इससे क्षेत्र के सभी पिक्सल, आंकड़ों में बदल जाते हैं या क्षेत्र के पिक्सल डेटा को कम जगह में दिखाया जाता है. उदाहरण के लिए, हिस्टोग्राम. क्षेत्र को Geometry के तौर पर दिखाया जाता है. यह एक ऐसा पॉलीगॉन हो सकता है जिसमें कई पिक्सल हों या फिर यह एक ऐसा बिंदु हो सकता है जिसमें क्षेत्र में सिर्फ़ एक पिक्सल हो. दोनों ही मामलों में, जैसा कि पहली इमेज में दिखाया गया है, आउटपुट एक आंकड़ा होता है. यह आंकड़ा, क्षेत्र के पिक्सल से मिलता है.

reduceRegion डायग्राम
पहली इमेज. इमेज और किसी क्षेत्र पर लागू किए गए ee.Reducer का इलस्ट्रेशन.

reduceRegion() का इस्तेमाल करके, किसी इमेज के किसी इलाके में पिक्सल के आंकड़े पाने के उदाहरण के लिए, सियेरा नेवाडा कॉनिफ़र फ़ॉरेस्ट की सीमाओं के अंदर, पांच साल के Landsat कंपोजिट की औसत स्पेक्ट्रल वैल्यू ढूंढें. इसकी जानकारी, दूसरे चित्र में दी गई है:

// Load input imagery: Landsat 7 5-year composite.
var image = ee.Image('LANDSAT/LE7_TOA_5YEAR/2008_2012');

// Load an input region: Sierra Nevada.
var region = ee.Feature(ee.FeatureCollection('EPA/Ecoregions/2013/L3')
  .filter(ee.Filter.eq('us_l3name', 'Sierra Nevada'))
  .first());

// Reduce the region. The region parameter is the Feature geometry.
var meanDictionary = image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  scale: 30,
  maxPixels: 1e9
});

// The result is a Dictionary.  Print it.
print(meanDictionary);

कैलकुलेशन को फ़ोर्स करने के लिए, नतीजे को प्रिंट करना ही काफ़ी है. कोड एडिटर, नतीजे को कंसोल में Dictionary के तौर पर दिखाएगा. आउटपुट कुछ ऐसा दिखेगा:

B1: 25.406029716816853
B2: 23.971497014238988
B3: 22.91059593763103
B4: 54.83164133293403
B5: 38.07655472573677
B6_VCID_2: 198.93216428012906
B7: 24.063261634961563
reduceRegion डायग्राम
दूसरी इमेज. कैलिफ़ोर्निया और नेवादा के लिए, लैंडसैट इमेज डेटा का फ़ॉल्स कलर कंपोजिट. जिस हिस्से को कम करना है उसे सफ़ेद रंग में दिखाया गया है.

ध्यान दें कि इस उदाहरण में, reducer (ee.Reducer.mean()), geometry (region.geometry()), scale (30 मीटर), और maxPixels की वैल्यू देकर, रिड्यूसर में इनपुट करने के लिए ज़्यादा से ज़्यादा पिक्सल की संख्या तय की गई है. reduceRegion() कॉल में हमेशा स्केल तय किया जाना चाहिए. ऐसा इसलिए है, क्योंकि प्रोसेसिंग के जटिल फ़्लो में, अलग-अलग स्केल वाले अलग-अलग सोर्स का डेटा शामिल हो सकता है. ऐसे में, इनपुट से आउटपुट का स्केल साफ़ तौर पर तय नहीं किया जा सकेगा. ऐसे में, स्केल डिफ़ॉल्ट रूप से एक डिग्री पर सेट हो जाता है. इससे आम तौर पर अच्छे नतीजे नहीं मिलते. Earth Engine, स्केल को कैसे मैनेज करता है, इस बारे में ज़्यादा जानने के लिए यह पेज देखें.

स्केल सेट करने के दो तरीके हैं: scale पैरामीटर बताकर या सीआरएस और सीआरएस ट्रांसफ़ॉर्म बताकर. (सीआरएस और सीआरएस ट्रांसफ़ॉर्म के बारे में ज़्यादा जानकारी के लिए, ग्लॉसरी देखें). उदाहरण के लिए, ऊपर बताई गई meanDictionary की कमी, इनके बराबर है:

// As an alternative to specifying scale, specify a CRS and a CRS transform.
// Make this array by constructing a 4326 projection at 30 meters,
// then copying the bounds of the composite, from composite.projection().
var affine = [0.00026949458523585647, 0, -180, 0, -0.00026949458523585647, 86.0000269494563];

// Perform the reduction, print the result.
print(image.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: region.geometry(),
  crs: 'EPSG:4326',
  crsTransform: affine,
  maxPixels: 1e9
}));

आम तौर पर, स्केल तय करना ही काफ़ी होता है. इससे कोड को आसानी से पढ़ा जा सकता है. Earth Engine, पहले क्षेत्र को रेस्टर करके यह तय करता है कि रिड्यूसर में कौनसे पिक्सल डाले जाएं. अगर सीआरएस के बिना स्केल तय किया जाता है, तो क्षेत्र को इमेज के नेटिव प्रोजेक्शन में रेस्टर किया जाता है और तय किए गए रिज़ॉल्यूशन में स्केल किया जाता है. अगर सीआरएस और स्केल, दोनों की जानकारी दी गई है, तो क्षेत्र को उनके आधार पर रेस्टर किया जाता है.

इलाके में मौजूद पिक्सल

पिक्सल को क्षेत्र में शामिल करने और उनका वज़न तय करने के लिए, यहां दिए गए नियमों का पालन किया जाता है. ये नियम, तय किए गए स्केल और प्रोजेक्शन में लागू होते हैं:

  • बिना वज़न वाले रिड्यूसर (उदाहरण के लिए, ee.Reducer.count() या ee.Reducer.mean().unweighted()): पिक्सल तब शामिल किए जाते हैं, जब उनका सेंट्राइड क्षेत्र में हो और इमेज का मास्क शून्य से ज़्यादा हो.
  • वेटेड रिड्यूसर (उदाहरण के लिए, ee.Reducer.mean()): पिक्सल तब शामिल किए जाते हैं, जब कम से कम (लगभग) 0.5% पिक्सल क्षेत्र में हों और इमेज का मास्क शून्य से ज़्यादा हो; उनका वज़न, इमेज के मास्क और क्षेत्र में शामिल पिक्सल के (अनुमानित) फ़्रैक्शन में से कम होता है.

कैलकुलेशन पूरा करने के लिए, maxPixels पैरामीटर की ज़रूरत होती है. अगर इस उदाहरण में पैरामीटर को शामिल नहीं किया जाता है, तो गड़बड़ी का एक मैसेज दिखता है. यह मैसेज कुछ ऐसा दिखता है:

इन गड़बड़ियों को ठीक करने के कई विकल्प हैं: उदाहरण के तौर पर, maxPixels को बढ़ाएं, scale को बढ़ाएं या bestEffort को सही पर सेट करें. इससे, maxPixels से ज़्यादा न हो, इसके लिए स्केल अपने-आप बड़ा हो जाता है. अगर आपने maxPixels की वैल्यू नहीं दी है, तो डिफ़ॉल्ट वैल्यू का इस्तेमाल किया जाता है.