GEE加载数据及处理常用函数

本文介绍了如何在GoogleEarthEngine中使用PythonAPI进行数据集操作,包括数据集的打开和导出、筛选(按日期、空间和元数据)、统计分析(如加减乘除、融合、中位数计算、NDVI计算等)、以及空间统计(如百分位数计算)。重点展示了如何使用ee.ImageCollection和ee.FeatureCollection进行数据处理。
摘要由CSDN通过智能技术生成

数据集打开和导出

ee.FeatureCollection()

ee.FeatureCollection 是 Google Earth Engine Python API 中的一个类,用于表示地理空间数据的集合,其中每个元素都是 ee.Feature 对象。ee.Feature 对象表示地理空间数据的特征或要素,例如点、线、多边形等。ee.FeatureCollection 可以包含各种不同类型的要素,它们可以是点、线、面等地理空间实体。

你可以使用 ee.FeatureCollection 来加载和处理 Earth Engine 中的矢量数据,比如卫星影像的边界、地图数据、人类活动数据等。

ee.ImageCollection()

在 Google Earth Engine 中,ee.ImageCollection 是一个表示图像集合的对象,它包含了多个图像。图像集合通常用于存储时间序列数据,例如多时相的遥感影像数据。

你可以使用 ee.ImageCollection 对象来访问和操作图像集合,执行时间序列分析、数据筛选、图像合成等操作。

Export.image.toDrive()

Export.image.toDrive 是 Google Earth Engine 中用于将图像数据导出到 Google Drive 的方法。它允许你将图像数据以指定的格式(如 GeoTIFF)导出到你的 Google Drive 中,以便在本地进行进一步分析或处理。

以下是 Export.image.toDrive 方法的一般用法:

Export.image.toDrive({
  image: image,
  description: 'my_export_image',
  folder: 'my_folder',
  region: geometry,
  scale: 30,
  crs: 'EPSG:4326'
});

在这里,image 是要导出的图像对象,description 是导出图像的描述,folder 是指定导出图像保存到 Google Drive 中的文件夹名称,region 是导出图像的区域范围,scale 是导出图像的分辨率,crs 是导出图像的坐标参考系统。

数据集筛选

image.select()

在 Google Earth Engine 中,image.select() 方法用于选择图像中的特定波段或属性。波段是图像中的不同通道,而属性则是图像的元数据或其他附加信息。

在你的示例中,‘QA60’ 是 Landsat 系列影像中的一个质量评估(Quality Assessment)波段,通常用于指示像素的数据质量或云、阴影等信息。通过 image.select(‘QA60’),你可以选择图像中的这个特定波段,并进行进一步的分析或处理。

以下是一个示例,演示了如何使用 select() 方法选择 Landsat 影像中的质量评估波段:

// 导入 Landsat 影像数据集
var image = ee.Image('LANDSAT/LC08/C01/T1_TOA/LC08_044034_20140318');

// 选择质量评估波段
var qaBand = image.select('QA60');

// 打印波段信息
print('QA60 band:', qaBand);

在这个示例中,我们首先导入了 Landsat 影像数据集,然后使用 select(‘QA60’) 选择了其中的质量评估波段,并将结果存储在变量 qaBand 中。最后,我们使用 print() 方法打印了所选择的波段信息。

.filterDate()

在 Google Earth Engine 中,filterDate() 是用于按照日期范围过滤图像集合的方法。它接受两个参数:开始日期和结束日期,用于指定要过滤的时间范围。

.filterBounds()

在 Google Earth Engine 中,filterBounds() 是用于按照空间范围过滤图像集合的方法。它接受一个几何对象作为参数,用于指定要过滤的空间范围。

.filterMetadata()

在 Google Earth Engine 中,filterMetadata() 是用于按照图像元数据的特定属性值来过滤图像集合的方法。它接受三个参数:属性名称、比较运算符和属性值,用于指定要过滤的条件。

以下是 filterMetadata() 方法的一般用法:

var filteredCollection = originalCollection.filterMetadata(propertyName, operator, value);

在这里,originalCollection 是原始的图像集合,propertyName 是要过滤的属性名称,operator 是比较运算符(如小于、大于、等于等),value 是属性值。调用 filterMetadata() 方法后,将返回一个新的图像集合 filteredCollection,其中包含了原始图像集合中满足指定条件的所有图像。

以下是一个示例,演示了如何使用 filterMetadata() 方法按照图像的云量属性值来过滤 Landsat 影像集合:

// 创建一个 Landsat 影像集合
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');

// 指定云量小于 10% 的图像进行过滤
var filteredCollection = collection.filterMetadata('CLOUD_COVER', 'less_than', 10);

// 获取过滤后的图像数量
var count = filteredCollection.size();
print('Number of images after filtering by cloud cover:', count);

在这个示例中,我们首先创建了一个 Landsat 影像集合 collection,然后使用 filterMetadata() 方法按照云量属性(‘CLOUD_COVER’)小于 10% 的条件进行了过滤。最后,我们使用 size() 方法获取了过滤后的图像数量,并打印了结果。

.map()

在 Google Earth Engine 中,map() 方法用于将一个函数应用到图像集合中的每个图像。它可以用于对图像进行操作、计算统计量、执行地理空间分析等。

.clip(shp.geometry())

在 Google Earth Engine 中,clip() 方法用于将图像或图像集合裁剪到指定的几何区域。它接受一个几何对象作为参数,并将图像的范围限制在该几何区域内。

在你的示例中,shp.geometry() 返回了表示武汉市边界的几何对象,你想要将图像或图像集合裁剪到这个边界内。

数据集统计

.add()

在 Google Earth Engine 中,add() 方法用于执行数字对象之间的加法操作。它接受一个数字对象作为参数,并返回两个数字对象之间的和。

.subtract()

在 Google Earth Engine 中,subtract() 方法用于执行数字对象之间的减法操作。它接受一个数字对象作为参数,并返回两个数字对象之间的差值。

// 创建两个数字对象
var number1 = ee.Number(20);
var number2 = ee.Number(10);

// 计算两个数字对象之间的差值
var difference = number1.subtract(number2);

// 打印计算结果
print('Difference:', difference);

在这个示例中,我们首先创建了两个数字对象 number1 和 number2,分别表示整数 20 和整数 10。然后,我们使用 subtract() 方法计算了两个数字对象之间的差值,并将结果存储在变量 difference 中。最后,我们打印了计算结果。

.multiply()

在 Google Earth Engine 中,multiply() 方法用于执行数字对象之间的乘法操作。它接受一个数字对象作为参数,并返回两个数字对象之间的乘积。

// 创建两个数字对象
var number1 = ee.Number(5);
var number2 = ee.Number(10);

// 计算两个数字对象之间的乘积
var product = number1.multiply(number2);

// 打印计算结果
print('Product:', product);

在这个示例中,我们首先创建了两个数字对象 number1 和 number2,分别表示整数 5 和整数 10。然后,我们使用 multiply() 方法计算了两个数字对象之间的乘积,并将结果存储在变量 product 中。最后,我们打印了计算结果。

.divide()

divide 是一个在 Earth Engine 中用于图像操作的方法,它用于将图像中的每个像素值除以一个标量值或者另一个图像的像素值。

.mosaic()

.mosaic() 是 Google Earth Engine 中用于图像集合(Image Collection)处理的函数之一。在这个上下文中,.mosaic() 的作用是将图像集合中的多个图像融合成一幅单一的图像。

通常,当一个图像集合中存在多个图像时,它们可能在同一地点拥有不同的观测值。在这种情况下,.mosaic() 函数将根据像素值的优先级,选择一个图像作为结果图像的像素值。

具体来说,.mosaic() 函数会按照图像集合中图像的顺序,将每个像素的值从最后一幅图像开始,选择第一个非无效(无效值通常为0)的像素值作为结果图像的像素值。这样,它可以生成一幅整合了图像集合中所有图像信息的单一图像。

在这个上下文中,.mosaic() 可能用于整合经过预处理的图像集合,以便进行后续的分析或可视化。

.median()

在 Google Earth Engine 中,median() 方法用于计算图像集合中每个像素的中位数。它适用于时间序列数据,例如 Landsat 影像集合,可以用于减少季节性或气候变化的影响,并生成一个中位数合成图像。

以下是 median() 方法的一般用法:

var medianImage = imageCollection.median();

在这里,imageCollection 是一个图像集合,median() 方法用于计算该图像集合中每个像素的中位数,并返回一个合成的中位数图像 medianImage。

以下是一个示例,演示了如何使用 median() 方法对 Landsat 影像集合进行中位数合成:

// 创建一个 Landsat 影像集合
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
    .filterBounds(geometry)  // 过滤指定区域
    .filterDate('2020-01-01', '2020-12-31')  // 过滤指定日期范围
    .filter(ee.Filter.lt('CLOUD_COVER', 10));  // 过滤云量小于 10% 的影像

// 对图像集合进行中位数合成
var medianImage = collection.median();

// 打印中位数合成图像
print('Median composite image:', medianImage);

在这个示例中,我们首先创建了一个 Landsat 影像集合 collection,然后使用 median() 方法对该图像集合进行了中位数合成,生成了一个中位数合成图像 medianImage。最后,我们打印了中位数合成图像。

.normalizedDifference()

在 Google Earth Engine 中,normalizedDifference() 方法用于计算两个波段的归一化差值指数(Normalized Difference Index,NDI)。归一化差值指数是遥感图像处理中常用的指数之一,可以用于提取地表特征信息,如植被覆盖、土壤湿度等。

该方法接受两个波段作为参数,分别表示被除数波段和除数波段,然后返回一个图像或图像集合,其中每个像素的值表示两个波段归一化差值指数的计算结果。

以下是 normalizedDifference() 方法的一般用法:

var ndiImage = image.normalizedDifference(['band1', 'band2']);

在这里,image 是一个图像对象,[‘band1’, ‘band2’] 是一个包含两个字符串的数组,分别表示被除数波段和除数波段。调用 normalizedDifference() 方法后,将返回一个新的图像 ndiImage,其中每个像素的值表示两个波段归一化差值指数的计算结果。

以下是一个示例,演示了如何使用 normalizedDifference() 方法计算 Landsat 影像集合中每个图像的 NDVI(归一化植被指数):

// 创建一个 Landsat 影像集合
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
    .filterBounds(geometry)  // 过滤指定区域
    .filterDate('2020-01-01', '2020-12-31')  // 过滤指定日期范围
    .filter(ee.Filter.lt('CLOUD_COVER', 10));  // 过滤云量小于 10% 的影像

// 对图像集合中的每个图像计算 NDVI
var ndviCollection = collection.map(function(image) {
  return image.normalizedDifference(['B5', 'B4']);
});

// 打印处理后的图像集合
print('NDVI collection:', ndviCollection);

在这个示例中,我们首先创建了一个 Landsat 影像集合 collection,然后使用 map() 方法对图像集合中的每个图像应用 normalizedDifference() 方法,计算 NDVI,并返回一个新的图像集合 ndviCollection。最后,我们打印了处理后的图像集合。

.rename()

在 Google Earth Engine 中,rename() 方法用于重命名图像或图像集合中的波段。它接受一个字典作为参数,其中包含原始波段名称和新波段名称的映射关系。

var renamedCollection = collection.map(function(image) {
  return image.rename({
    'B1': 'blue',
    'B2': 'green',
    'B3': 'red',
    'B4': 'nir',
    'B5': 'swir1',
    'B6': 'swir2'
  });
});

.lt(0)

在 Google Earth Engine 中,lt() 方法用于创建一个比较运算符小于(less than)0的过滤器。这个方法通常用于筛选图像集合中像素值小于某个特定阈值的像素。

.gt(0)

在 Google Earth Engine 中,.gt() 方法用于创建一个比较运算符大于(greater than)0的过滤器。这个方法通常用于筛选图像集合中像素值大于某个特定阈值的像素。

.reduceRegion()

在 Google Earth Engine 中,reduceRegion() 方法用于在图像或图像集合上执行空间统计,返回指定区域内的汇总统计信息。这个方法可以用于计算区域内像素值的总和、平均值、最小值、最大值等统计量。

var statistics = image.reduceRegion({
  reducer: ee.Reducer.mean(),  // 指定统计方法
  geometry: geometry,           // 指定区域几何对象
  scale: 30                     // 指定分辨率(可选)
});

在这里,image 是一个图像对象,ee.Reducer.mean() 是一个统计方法,用于计算指定区域内的像素值平均值。geometry 是一个几何对象,表示要统计的区域范围。scale 是一个可选参数,用于指定统计计算的分辨率。

调用 reduceRegion() 方法后,将返回一个包含统计信息的字典,其中包括指定区域内的像素值统计量。

以下是一个示例,演示了如何使用 reduceRegion() 方法计算指定区域内 Landsat 影像集合的像素值平均值:

// 创建一个 Landsat 影像集合
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
    .filterBounds(geometry)  // 过滤指定区域
    .filterDate('2020-01-01', '2020-12-31');  // 过滤指定日期范围

// 计算指定区域内影像集合的像素值平均值
var statistics = collection.reduceRegion({
  reducer: ee.Reducer.mean(),  // 指定统计方法为平均值
  geometry: geometry,           // 指定区域几何对象
  scale: 30                     // 指定分辨率为 30 米
});

// 打印统计信息
print('Mean pixel values:', statistics);

在这个示例中,我们首先创建了一个 Landsat 影像集合 collection,然后使用 reduceRegion() 方法计算了指定区域内影像集合的像素值平均值。最后,我们打印了计算得到的统计信息。

ee.Reducer.percentile()

在 Google Earth Engine 中,ee.Reducer.percentile() 是一个统计方法,用于计算指定百分位数的像素值。它将返回在给定百分位数下的像素值。

以下是 ee.Reducer.percentile() 方法的一般用法:

var reducer = ee.Reducer.percentile({
  percentiles: [percentile]  // 指定百分位数的数组
});

在这里,percentile 是一个数组,包含要计算的百分位数。调用 ee.Reducer.percentile() 方法后,将创建一个统计方法,用于计算指定百分位数下的像素值。

以下是一个示例,演示了如何使用 ee.Reducer.percentile() 方法计算 Landsat 影像集合中每个波段的第 10 和第 90 百分位数:

// 创建一个 Landsat 影像集合
var collection = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA')
    .filterBounds(geometry)  // 过滤指定区域
    .filterDate('2020-01-01', '2020-12-31');  // 过滤指定日期范围

// 计算第 10 和第 90 百分位数
var percentileReducer = ee.Reducer.percentile({
  percentiles: [10, 90]  // 指定要计算的百分位数
});

// 应用百分位数统计方法到图像集合的每个波段
var percentiles = collection.reduce(percentileReducer);

// 打印第 10 和第 90 百分位数
print('10th percentile:', percentiles.get('B1_p10'));
print('90th percentile:', percentiles.get('B1_p90'));

在这个示例中,我们首先创建了一个 Landsat 影像集合 collection,然后使用 ee.Reducer.percentile() 方法创建了一个统计方法,用于计算第 10 和第 90 百分位数。接着,我们应用了这个统计方法到图像集合的每个波段,并获取了计算得到的第 10 和第 90 百分位数。最后,我们打印了这些百分位数。

创建

ee.Image(1)

ee.Image() 方法用于创建一个新的图像对象,并且可以接受一个常量作为参数,用于初始化图像的所有像素值。

ee.Number()

在 Google Earth Engine 中,ee.Number 是用于表示数字的数据类型。它用于在 Earth Engine 中进行数值计算和处理。

// 创建数字对象
var number1 = ee.Number(10);
var number2 = ee.Number(20.5);

在这个示例中,我们首先使用 ee.Number() 方法创建了两个数字对象 number1 和 number2,分别表示整数 10 和浮点数 20.5。然后,我们进行了一些数值计算,包括加法、减法、乘法和除法,并打印了计算结果。

  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵波波107

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值