谷歌地球引擎Google Earth Engine批量下载遥感影像数据的方法

发布时间:2024年01月22日

??本文介绍在谷歌地球引擎(Google Earth Engine,GEE)中,批量下载指定时间范围空间范围遥感影像数据(包括LandsatSentinel等)的方法。

??本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第21篇,更多GEE文章请参考专栏:GEE学习与应用(https://blog.csdn.net/zhebushibiaoshifu/category_11081040.html)。

??我们之前多次介绍过基于官方网站或者GEE平台,对常见遥感影像数据产品加以下载的方法,大家具体可以参考文章遥感影像数据下载网站整理(https://fkxxgis.blog.csdn.net/article/details/114449027)、Landsat系列卫星遥感影像数据USGS中批量下载多张图像的方法(https://fkxxgis.blog.csdn.net/article/details/115387022)、哨兵2号Sentinel-2已经完成大气校正的L2A级遥感影像产品的下载方法(https://fkxxgis.blog.csdn.net/article/details/127266248)、Google Earth Engine谷歌地球引擎GEE批量下载ImageCollection遥感影像数据合集的方法(https://fkxxgis.blog.csdn.net/article/details/135097462)等。但是,我们还一直没有介绍在GEE中,不加任何其他复杂的二次筛选与计算需求,而是直接下载指定时间范围空间范围遥感影像数据的最简单方法;那么在这里,我们就介绍一下这个最简单、原始的下载方法。

??当然,这里需要提一句:GEE下载遥感影像除了需要网络可以出国外,还有一个约束条件,就是Google Drive的大小——如果大家需要下载的遥感影像超过了自己的Google Drive大小(一般普通的账号,这个大小就是15 G),那么就得手动分批次下载,即每一次下载部分数据后,就清空一下Google Drive,然后再继续下载。

??首先,本文用到的代码如下。这个代码下载的是2019年里,在四川省黄龙附近某个区域的所有哨兵2号遥感影像数据;大家可以先看代码,然后结合自己的实际需求,对这个代码加以修改,从而下载自己所需的遥感影像数据。

var batch = require('users/fitoprincipe/geetools:batch');

var lon3 = 104.0111;
var lat3 = 32.8925;
var lon4 = 104.0883;
var lat4 = 33.0061;
var rectangle_small = ee.Geometry.Rectangle([lon3, lat3, lon4, lat4]);
var lon1 = 103.9500;
var lat1 = 32.8154;
var lon2 = 104.1920;
var lat2 = 33.0460;
var rectangle = ee.Geometry.Rectangle([lon1, lat1, lon2, lat2]);

var startDate = '2019-01-01';
var endDate = '2020-01-01';

var collection = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
  .filterBounds(rectangle_small)
  .filterDate(startDate, endDate)
  .select(["B2", "B3", "B4", "B5", "B6", "B7", "B8", "B8A"])
  .map(function(image) {
    return image.clip(rectangle);
  });

Map.addLayer(rectangle, {}, 'Bounding Box');
Map.addLayer(collection, {}, "Images");
  
var options = {
  // name: '{system_date}',
  // dateFormat: 'yyyy-MM-dd',
  scale: 10,
  maxPixels: 10000000000000,
  region: rectangle
};
batch.Download.ImageCollection.toDrive(collection, "Sentinel", options)

??代码具体含义如下。

??首先,var batch = require('users/fitoprincipe/geetools:batch');这句代码导入了GEE中一位个人作者所写的批处理工具库,用于进行批量下载操作。关于这一点,大家参考文章Google Earth Engine谷歌地球引擎GEE批量下载ImageCollection遥感影像数据合集的方法(https://fkxxgis.blog.csdn.net/article/details/135097462)即可。

??其次,我们定义了两个矩形几何体rectangle_smallrectangle。这些几何体定义了我这里感兴趣区域的范围,其中 rectangle_small是较小的矩形范围,用于过滤Sentinel-2影像集合,而rectangle是较大的矩形范围,用于裁剪图像。换句话说,我这里的需求是,获取所有落入rectangle_small这个较小的矩形范围的遥感影像,然后对于这些遥感影像,将他们再按照rectangle这个较大的矩形范围加以裁剪;最后下载的就是落入rectangle_small区域的、按照rectangle区域裁剪后的遥感影像。

??随后,我们定义了起始日期和结束日期startDateendDate。这些日期用于在时间范围内过滤Sentinel-2影像集合。

??接下来,我们使用ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')获取Sentinel-2影像集合;如果大家这里需要其他的遥感影像产品,就修改其产品名称即可。接着,使用filterBounds()函数根据rectangle_small过滤图像集合,然后使用filterDate()函数根据日期范围过滤图像集合。

??其次,使用select()函数选择特定的波段。在这里,我是选择了影像中的B2B3B4B5B6B7B8B8A波段;这里大家需要什么波段,就对照着数据产品在GEE官网中的介绍,按照需求选择波段即可。随后,使用map()函数对图像集合中的每个影像应用clip()函数,以裁剪图像为rectangle范围内的区域。

??接下来,可以使用Map.addLayer()rectangle添加到地图中作为边界框的可视化;可以使用Map.addLayer()将图像集合collection添加到地图中进行可视化。这里的可视化只是为了确认我们所选择研究区域是没有问题的,如下图所示;所以这里的代码大家想要就要,不想要就注释掉。

??最后,我们定义了下载选项options,包括输出文件的比例尺、最大像素数和下载区域。并使用batch.Download.ImageCollection.toDrive()函数将图像集合collection下载到Google Drive中,以Sentinel作为文件夹的名称。关于这一点,大家参考文章Google Earth Engine谷歌地球引擎GEE批量下载ImageCollection遥感影像数据合集的方法(https://fkxxgis.blog.csdn.net/article/details/135097462)即可。

??执行上述代码,即可在Tasks中看到生成的任务列表,每一个任务就是每一景遥感影像的下载。

??运行上述任务后,遥感影像将出现在Google Drive中的指定文件夹内,如下图所示。

??然后,大家再将Google Drive中的遥感影像文件下载到本地即可。

??至此,大功告成。

欢迎关注:疯狂学习GIS

文章来源:https://blog.csdn.net/zhebushibiaoshifu/article/details/135746855
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。