GEE(Google Earth Engine)——JavaScript 入门(3)

2024-02-01 19:53:50 浏览数 (1)

波段计算

使用Image方法对图像进行数学运算。这可能包括波段重组(光谱指数)、图像差分或数学运算,例如乘以常数。例如,计算相隔 20 年的归一化差异植被指数 (NDVI) 图像之间的差异:

代码编辑器 (JavaScript)

代码语言:javascript复制
// This function gets NDVI from Landsat 5 imagery.
var getNDVI = function(image) {
  return image.normalizedDifference(['B4', 'B3']);
};

// Load two Landsat 5 images, 20 years apart.
var image1 = ee.Image('LANDSAT/LT05/C01/T1_TOA/LT05_044034_19900604');
var image2 = ee.Image('LANDSAT/LT05/C01/T1_TOA/LT05_044034_20100611');

// Compute NDVI from the scenes.
var ndvi1 = getNDVI(image1);
var ndvi2 = getNDVI(image2);

// Compute the difference in NDVI.
var ndviDifference = ndvi2.subtract(ndvi1);

请注意function本示例中定义的用户的使用。更多关于下一节的功能。

映射(做什么而不是 for 循环)

使用map()以遍历集合中的项目。(For 循环不是在 Earth Engine 中执行此操作的正确方法,应避免使用)。该map() 函数可以应用于 an ImageCollection、 a FeatureCollection或 aList并接受 afunction 作为其参数。函数的参数是它所映射的集合的一个元素。这对于以相同的方式修改集合的每个元素很有用,例如添加。例如,以下代码向 中的每个图像添加 NDVI 波段ImageCollection:

代码编辑器 (JavaScript)

代码语言:javascript复制
// This function gets NDVI from Landsat 8 imagery.
var addNDVI = function(image) {
  return image.addBands(image.normalizedDifference(['B5', 'B4']));
};

// Load the Landsat 8 raw data, filter by location and date.
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1')
  .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
  .filterDate('2014-06-01', '2014-10-01');

// Map the function over the collection.
var ndviCollection = collection.map(addNDVI);

另一个常见任务是向 .csv 文件中的要素添加新属性(或“属性”或“字段”) FeatureCollection。在以下示例中,新属性是涉及两个现有属性的计算:

代码编辑器 (JavaScript)

代码语言:javascript复制
// This function creates a new property that is the sum of two existing properties.
var addField = function(feature) {
  var sum = ee.Number(feature.get('property1')).add(feature.get('property2'));
  return feature.set({'sum': sum});
};

// Create a FeatureCollection from a list of Features.
var features = ee.FeatureCollection([
  ee.Feature(ee.Geometry.Point(-122.4536, 37.7403),
    {property1: 100, property2: 100}),
    ee.Feature(ee.Geometry.Point(-118.2294, 34.039),
    {property1: 200, property2: 300}),
]);

// Map the function over the collection.
var featureCollection = features.map(addField);

// Print a selected property of one Feature.
print(featureCollection.first().get('sum'));

// Print the entire FeatureCollection.
print(featureCollection);

请注意将ee.Number属性值识别为数字以使用该add()方法所需的强制转换)。可以通过 更改集合的类型map()。例如:

代码编辑器 (JavaScript)

代码语言:javascript复制
// This function returns the image centroid as a new Feature.
var getGeom = function(image) {
  return ee.Feature(image.geometry().centroid(), {foo: 1});
};

// Load a Landsat 8 collection.
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1')
  .filterBounds(ee.Geometry.Point(-122.262, 37.8719))
  .filterDate('2014-06-01', '2014-10-01');

// Map the function over the ImageCollection.
var featureCollection = ee.FeatureCollection(collection.map(getGeom));

// Print the collection.
print(featureCollection);

请注意foo为从图像质心创建的每个要素添加的属性 ( )。在最后一行中,演员表使生成的集合可识别为 FeatureCollection.

以上所有例子都可以在科学上网的情况下,完成直达,具体图像我就不展示了,希望对大家有帮助,更多资源可以点击资源查看。

0 人点赞