آرایه ها در Earth Engine از لیست اعداد و لیست لیست ها ساخته می شوند. درجه لانه سازی تعداد ابعاد را تعیین می کند. برای شروع با یک مثال ساده و با انگیزه، مثال زیر از Array
ای که از ضرایب کلاهک منگوله دار (TC) Landsat 8 ایجاد شده است را در نظر بگیرید ( Baig et al., 2014 ):
ویرایشگر کد (جاوا اسکریپت)
// Create an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]);
import ee import geemap.core as geemap
کولب (پایتون)
# Create an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ])
تأیید کنید که این یک آرایه 2 بعدی 6x6 با استفاده از length()
است که طول هر محور را برمی گرداند:
ویرایشگر کد (جاوا اسکریپت)
// Print the dimensions. print(coefficients.length()); // [6,6]
import ee import geemap.core as geemap
کولب (پایتون)
# Print the dimensions. display(coefficients.length()) # [6,6]
جدول زیر ترتیب ورودی های ماتریس را در امتداد محور 0 و محور 1 نشان می دهد:
1 محور -> | |||||||
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | ||
0 | 0.3029 | 0.2786 | 0.4733 | 0.5599 | 0.508 | 0.1872 | |
1 | -0.2941 | -0.243 | -0.5424 | 0.7276 | 0.0713 | -0.1608 | |
0-محور | 2 | 0.1511 | 0.1973 | 0.3283 | 0.3407 | -0.7117 | -0.4559 |
3 | -0.8239 | 0.0849 | 0.4396 | -0.058 | 0.2013 | -0.2773 | |
4 | -0.3294 | 0.0557 | 0.1056 | 0.1855 | -0.4349 | 0.8085 | |
5 | 0.1079 | -0.9023 | 0.4119 | 0.0575 | -0.0259 | 0.0252 |
شاخص های سمت چپ جدول موقعیت ها را در امتداد محور 0 نشان می دهد. عنصر n در هر لیست در محور 0 در موقعیت n در امتداد محور 1 قرار دارد. برای مثال، ورودی در مختصات [3،1] آرایه 0.0849 است. فرض کنید "سبز بودن" جزء TC مورد علاقه است. می توانید زیر ماتریس سبز بودن را با استفاده از slice()
بدست آورید:
ویرایشگر کد (جاوا اسکریپت)
// Get the 1x6 greenness slice, display it. var greenness = coefficients.slice({axis: 0, start: 1, end: 2, step: 1}); print(greenness);
import ee import geemap.core as geemap
کولب (پایتون)
# Get the 1x6 greenness slice, display it. greenness = coefficients.slice(axis=0, start=1, end=2, step=1) display(greenness)
ماتریس سبزی دوبعدی باید چیزی شبیه به زیر باشد:
[[-0.2941,-0.243,-0.5424,0.7276,0.0713,-0.1608]]
توجه داشته باشید که پارامترهای start
و end
slice()
با شاخص های محور صفر نمایش داده شده در جدول مطابقت دارند ( start
شامل و end
انحصاری است).
آرایه تصاویر
برای به دست آوردن یک تصویر سبز، ماتریس باندهای تصویر لندست 8 را در ماتریس سبز بودن ضرب کنید. برای انجام این کار، ابتدا تصویر چند باندی Landsat را به یک "Array Image" تبدیل کنید، جایی که هر پیکسل Array
ای از مقادیر باند است. به عنوان مثال:
ویرایشگر کد (جاوا اسکریپت)
// Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1);
import ee import geemap.core as geemap
کولب (پایتون)
# Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1)
در این مثال، توجه داشته باشید که toArray()
image
به یک تصویر آرایه ای تبدیل می کند که در آن هر پیکسل یک بردار 1 بعدی است که ورودی های آن با 6 مقدار در موقعیت های مربوطه در باندهای image
مطابقت دارد. تصویر آرایه ای از بردارهای 1 بعدی ایجاد شده به این روش مفهومی از شکل دو بعدی ندارد. برای انجام عملیات فقط دو بعدی مانند ضرب ماتریس، آن را با استفاده از toArray(1)
به یک تصویر آرایه دو بعدی در هر پیکسل تبدیل کنید. در هر پیکسل از تصویر آرایه دو بعدی، یک ماتریس 6x1 از مقادیر باند وجود دارد. برای مشاهده این موضوع به مثال اسباب بازی زیر توجه کنید:
ویرایشگر کد (جاوا اسکریپت)
var array1D = ee.Array([1, 2, 3]); // [1,2,3] var array2D = ee.Array.cat([array1D], 1); // [[1],[2],[3]]
import ee import geemap.core as geemap
کولب (پایتون)
array_1d = ee.Array([1, 2, 3]) # [1,2,3] array_2d = ee.Array.cat([array_1d], 1) # [[1],[2],[3]]
توجه کنید که بردار array1D
در امتداد محور 0 تغییر می کند. ماتریس array2D
نیز این کار را انجام می دهد، اما یک بعد اضافی دارد. فراخوانی toArray(1)
در تصویر آرایه مانند فراخوانی cat(bandVector, 1)
روی هر پیکسل است. با استفاده از تصویر آرایه دوبعدی، در سمت چپ ضرب در تصویری که هر پیکسل حاوی یک ماتریس دو بعدی از ضرایب سبزی است:
ویرایشگر کد (جاوا اسکریپت)
// Do a matrix multiplication: 1x6 times 6x1. // Cast the greenness Array to an Image prior to multiplication. var greennessArrayImage = ee.Image(greenness).matrixMultiply(arrayImage2D);
import ee import geemap.core as geemap
کولب (پایتون)
# Do a matrix multiplication: 1x6 times 6x1. # Cast the greenness Array to an Image prior to multiplication. greenness_array_image = ee.Image(greenness).matrixMultiply(array_image_2d)
نتیجه یک تصویر آرایه جدید است که در آن هر پیکسل ماتریس 1x1 است که از ضرب ماتریس سبزی 1x6 (چپ) و ماتریس باند 6x1 (راست) حاصل می شود. برای اهداف نمایش، با arrayGet()
به یک تصویر معمولی و یک باند تبدیل کنید:
ویرایشگر کد (جاوا اسکریپت)
// Get the result from the 1x1 array in each pixel of the 2-D array image. var greennessImage = greennessArrayImage.arrayGet([0, 0]); // Display the input imagery with the greenness result. Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(greennessImage, {min: -0.1, max: 0.13}, 'greenness');
import ee import geemap.core as geemap
کولب (پایتون)
# Get the result from the 1x1 array in each pixel of the 2-D array image. greenness_image = greenness_array_image.arrayGet([0, 0]) # Display the input imagery with the greenness result. m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(greenness_image, {'min': -0.1, 'max': 0.13}, 'greenness') m
در اینجا یک مثال کامل آورده شده است که از کل آرایه ضرایب برای محاسبه همزمان چندین مؤلفه کلاهک منگوله ای و نمایش نتیجه استفاده می کند:
ویرایشگر کد (جاوا اسکریپت)
// Define an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]); // Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1); // Do a matrix multiplication: 6x6 times 6x1. var componentsImage = ee.Image(coefficients) .matrixMultiply(arrayImage2D) // Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']]); // Display the first three bands of the result and the input imagery. var vizParams = { bands: ['brightness', 'greenness', 'wetness'], min: -0.1, max: [0.5, 0.1, 0.1] }; Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(componentsImage, vizParams, 'components');
import ee import geemap.core as geemap
کولب (پایتون)
# Define an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]) # Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1) # Do a matrix multiplication: 6x6 times 6x1. components_image = ( ee.Image(coefficients) .matrixMultiply(array_image_2d) # Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']] ) ) # Display the first three bands of the result and the input imagery. viz_params = { 'bands': ['brightness', 'greenness', 'wetness'], 'min': -0.1, 'max': [0.5, 0.1, 0.1], } m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(components_image, viz_params, 'components') m
توجه داشته باشید که هنگام گرفتن نوارها از یک تصویر آرایه، ابتدا با project()
از شر ابعاد اضافی خلاص شوید، سپس با arrayFlatten()
آن را به یک تصویر معمولی تبدیل کنید. خروجی باید چیزی شبیه به این باشد:

آرایه ها در Earth Engine از لیست اعداد و لیست لیست ها ساخته می شوند. درجه لانه سازی تعداد ابعاد را تعیین می کند. برای شروع با یک مثال ساده و با انگیزه، مثال زیر از Array
ای که از ضرایب کلاهک منگوله دار (TC) Landsat 8 ایجاد شده است را در نظر بگیرید ( Baig et al., 2014 ):
ویرایشگر کد (جاوا اسکریپت)
// Create an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]);
import ee import geemap.core as geemap
کولب (پایتون)
# Create an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ])
تأیید کنید که این یک آرایه 2 بعدی 6x6 با استفاده از length()
است که طول هر محور را برمی گرداند:
ویرایشگر کد (جاوا اسکریپت)
// Print the dimensions. print(coefficients.length()); // [6,6]
import ee import geemap.core as geemap
کولب (پایتون)
# Print the dimensions. display(coefficients.length()) # [6,6]
جدول زیر ترتیب ورودی های ماتریس را در امتداد محور 0 و محور 1 نشان می دهد:
1 محور -> | |||||||
---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | ||
0 | 0.3029 | 0.2786 | 0.4733 | 0.5599 | 0.508 | 0.1872 | |
1 | -0.2941 | -0.243 | -0.5424 | 0.7276 | 0.0713 | -0.1608 | |
0-محور | 2 | 0.1511 | 0.1973 | 0.3283 | 0.3407 | -0.7117 | -0.4559 |
3 | -0.8239 | 0.0849 | 0.4396 | -0.058 | 0.2013 | -0.2773 | |
4 | -0.3294 | 0.0557 | 0.1056 | 0.1855 | -0.4349 | 0.8085 | |
5 | 0.1079 | -0.9023 | 0.4119 | 0.0575 | -0.0259 | 0.0252 |
شاخص های سمت چپ جدول موقعیت ها را در امتداد محور 0 نشان می دهد. عنصر n در هر لیست در محور 0 در موقعیت n در امتداد محور 1 قرار دارد. برای مثال، ورودی در مختصات [3،1] آرایه 0.0849 است. فرض کنید "سبز بودن" جزء TC مورد علاقه است. می توانید زیر ماتریس سبز بودن را با استفاده از slice()
بدست آورید:
ویرایشگر کد (جاوا اسکریپت)
// Get the 1x6 greenness slice, display it. var greenness = coefficients.slice({axis: 0, start: 1, end: 2, step: 1}); print(greenness);
import ee import geemap.core as geemap
کولب (پایتون)
# Get the 1x6 greenness slice, display it. greenness = coefficients.slice(axis=0, start=1, end=2, step=1) display(greenness)
ماتریس سبزی دوبعدی باید چیزی شبیه به زیر باشد:
[[-0.2941,-0.243,-0.5424,0.7276,0.0713,-0.1608]]
توجه داشته باشید که پارامترهای start
و end
slice()
با شاخص های محور صفر نمایش داده شده در جدول مطابقت دارند ( start
شامل و end
انحصاری است).
تصاویر آرایه ای
برای به دست آوردن یک تصویر سبز، ماتریس باندهای تصویر لندست 8 را در ماتریس سبز بودن ضرب کنید. برای انجام این کار، ابتدا تصویر چند باندی Landsat را به یک "Array Image" تبدیل کنید، جایی که هر پیکسل Array
ای از مقادیر باند است. به عنوان مثال:
ویرایشگر کد (جاوا اسکریپت)
// Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1);
import ee import geemap.core as geemap
کولب (پایتون)
# Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1)
در این مثال، توجه داشته باشید که toArray()
image
به یک تصویر آرایه ای تبدیل می کند که در آن هر پیکسل یک بردار 1 بعدی است که ورودی های آن با 6 مقدار در موقعیت های مربوطه در باندهای image
مطابقت دارد. تصویر آرایه ای از بردارهای 1 بعدی ایجاد شده به این روش مفهومی از شکل دو بعدی ندارد. برای انجام عملیات فقط دو بعدی مانند ضرب ماتریس، آن را با استفاده از toArray(1)
به یک تصویر آرایه دو بعدی در هر پیکسل تبدیل کنید. در هر پیکسل از تصویر آرایه دو بعدی، یک ماتریس 6x1 از مقادیر باند وجود دارد. برای مشاهده این موضوع به مثال اسباب بازی زیر توجه کنید:
ویرایشگر کد (جاوا اسکریپت)
var array1D = ee.Array([1, 2, 3]); // [1,2,3] var array2D = ee.Array.cat([array1D], 1); // [[1],[2],[3]]
import ee import geemap.core as geemap
کولب (پایتون)
array_1d = ee.Array([1, 2, 3]) # [1,2,3] array_2d = ee.Array.cat([array_1d], 1) # [[1],[2],[3]]
توجه کنید که بردار array1D
در امتداد محور 0 تغییر می کند. ماتریس array2D
نیز این کار را انجام می دهد، اما یک بعد اضافی دارد. فراخوانی toArray(1)
در تصویر آرایه مانند فراخوانی cat(bandVector, 1)
روی هر پیکسل است. با استفاده از تصویر آرایه دوبعدی، در سمت چپ ضرب در تصویری که هر پیکسل حاوی یک ماتریس دو بعدی از ضرایب سبزی است:
ویرایشگر کد (جاوا اسکریپت)
// Do a matrix multiplication: 1x6 times 6x1. // Cast the greenness Array to an Image prior to multiplication. var greennessArrayImage = ee.Image(greenness).matrixMultiply(arrayImage2D);
import ee import geemap.core as geemap
کولب (پایتون)
# Do a matrix multiplication: 1x6 times 6x1. # Cast the greenness Array to an Image prior to multiplication. greenness_array_image = ee.Image(greenness).matrixMultiply(array_image_2d)
نتیجه یک تصویر آرایه جدید است که در آن هر پیکسل ماتریس 1x1 است که از ضرب ماتریس سبزی 1x6 (چپ) و ماتریس باند 6x1 (راست) حاصل می شود. برای اهداف نمایش، با arrayGet()
به یک تصویر معمولی و یک باند تبدیل کنید:
ویرایشگر کد (جاوا اسکریپت)
// Get the result from the 1x1 array in each pixel of the 2-D array image. var greennessImage = greennessArrayImage.arrayGet([0, 0]); // Display the input imagery with the greenness result. Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(greennessImage, {min: -0.1, max: 0.13}, 'greenness');
import ee import geemap.core as geemap
کولب (پایتون)
# Get the result from the 1x1 array in each pixel of the 2-D array image. greenness_image = greenness_array_image.arrayGet([0, 0]) # Display the input imagery with the greenness result. m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(greenness_image, {'min': -0.1, 'max': 0.13}, 'greenness') m
در اینجا یک مثال کامل آورده شده است که از کل آرایه ضرایب برای محاسبه همزمان چندین مؤلفه کلاهک منگوله ای و نمایش نتیجه استفاده می کند:
ویرایشگر کد (جاوا اسکریپت)
// Define an Array of Tasseled Cap coefficients. var coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]); // Load a Landsat 8 image, select the bands of interest. var image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B2', 'B3', 'B4', 'B5', 'B6', 'B7']); // Make an Array Image, with a 1-D Array per pixel. var arrayImage1D = image.toArray(); // Make an Array Image with a 2-D Array per pixel, 6x1. var arrayImage2D = arrayImage1D.toArray(1); // Do a matrix multiplication: 6x6 times 6x1. var componentsImage = ee.Image(coefficients) .matrixMultiply(arrayImage2D) // Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']]); // Display the first three bands of the result and the input imagery. var vizParams = { bands: ['brightness', 'greenness', 'wetness'], min: -0.1, max: [0.5, 0.1, 0.1] }; Map.setCenter(-122.3, 37.562, 10); Map.addLayer(image, {bands: ['B5', 'B4', 'B3'], min: 0, max: 0.5}, 'image'); Map.addLayer(componentsImage, vizParams, 'components');
import ee import geemap.core as geemap
کولب (پایتون)
# Define an Array of Tasseled Cap coefficients. coefficients = ee.Array([ [0.3029, 0.2786, 0.4733, 0.5599, 0.508, 0.1872], [-0.2941, -0.243, -0.5424, 0.7276, 0.0713, -0.1608], [0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559], [-0.8239, 0.0849, 0.4396, -0.058, 0.2013, -0.2773], [-0.3294, 0.0557, 0.1056, 0.1855, -0.4349, 0.8085], [0.1079, -0.9023, 0.4119, 0.0575, -0.0259, 0.0252], ]) # Load a Landsat 8 image, select the bands of interest. image = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318').select( ['B2', 'B3', 'B4', 'B5', 'B6', 'B7'] ) # Make an Array Image, with a 1-D Array per pixel. array_image_1d = image.toArray() # Make an Array Image with a 2-D Array per pixel, 6x1. array_image_2d = array_image_1d.toArray(1) # Do a matrix multiplication: 6x6 times 6x1. components_image = ( ee.Image(coefficients) .matrixMultiply(array_image_2d) # Get rid of the extra dimensions. .arrayProject([0]) .arrayFlatten( [['brightness', 'greenness', 'wetness', 'fourth', 'fifth', 'sixth']] ) ) # Display the first three bands of the result and the input imagery. viz_params = { 'bands': ['brightness', 'greenness', 'wetness'], 'min': -0.1, 'max': [0.5, 0.1, 0.1], } m = geemap.Map() m.set_center(-122.3, 37.562, 10) m.add_layer(image, {'bands': ['B5', 'B4', 'B3'], 'min': 0, 'max': 0.5}, 'image') m.add_layer(components_image, viz_params, 'components') m
توجه داشته باشید که هنگام گرفتن نوارها از یک تصویر آرایه، ابتدا با project()
از شر ابعاد اضافی خلاص شوید، سپس با arrayFlatten()
آن را به یک تصویر معمولی تبدیل کنید. خروجی باید چیزی شبیه به این باشد:
