Google Earth Engine 下载遥感影像——以Landsat 8数据为例

本文档详细介绍了如何使用Google Earth Engine(GEE)进行遥感影像处理,包括账号注册、数据集查询、影像加载、预处理、上传与导出。内容涵盖Landsat8数据的云剔除、裁剪等步骤,以及GEE的强大功能和便捷的代码共享。通过GEE,用户可以方便地进行遥感数据分析和下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1、Google Earth Engine(GEE)简介

1.1 开发环境

1.2 说明书

 2、GEE账号注册

3、GEE 查询库内卫星影像以及调用

3.1 数据集Datasets

3.2 加载影像

3.2.1 绘制感兴趣区

3.2.2 加载landsat 8数据集 

 3.3 影像的预处理

3.3.1 剔云处理

3.3.2 影像裁切

 4、GEE影像上传和导出

4.1 上传本地文件

4.2 在GEE上导出影像数据

 5、GEE共享以及全套代码


1、Google Earth Engine(GEE)简介

        遥感大数据云计算服务平台为区域或全球土地利用空间信息的获取提供了新的途径和方法。GEE 云平台是一款专门用于处理卫星影像数据和其他地球观测数据的云端运算平台,不但存储了完整的对地观测卫星影像数据,以及环境和社会经济等数据,还提供足够的运算能力对这些数据进行处理,成为解决遥感数据收集困难和处理效率低下问题的新途径。

官方网址https://earthengine.google.com/

1.1 开发环境

 在Guides中介绍了该云计算平台是由JS开发的共同Python语言。所以有这方面基础的读者可是说非常容易上手。在开发环境(Development Environment)中提到,一般有两种方式进行编译:1中是使用平台自带的(如下图)Code Editor网页版,另一种是通过搭建Python环境在本地进行编译。

1.2 说明书

 安利这个平台强烈的第一个原因就是它真的把说明书做的非常出色!

查看说明书的方式:官方网址右上角菜单栏Platform->Documentation->Reference. 即可。

非常的清晰,并且语法,示例一气呵成,更是有 吴秋生老师的视频讲解

第二个原因就是该平台的功能强大性,这个后续会做详细说明。


 2、GEE账号注册

        由于GEE是谷歌公司开发的一款云端计算平台,访问该网站需要科学上网才行。当你注册的时候,如果即使在科学上网的情况下遇到了无法接收到国内手机短信的情况,可以通过某宝来解决(别问我为什么知道)。申请完之后一般需要等官网发邮件通知,1-3天左右,这里强烈建立使用学校邮箱或者企业邮箱注册!!!

3、GEE 查询库内卫星影像以及调用

3.1 数据集Datasets

查看数据集的方式:官方网址右上角菜单栏Datasets.这里我们直接查看Landsat数据集。

这里我们可以看到Landsat数据集来源于USGS,被分为了Collection2 和 Collection1两种产品的数据集,Collection1产品是2016年建立的,现在被Collection2所取代。我们知道USGS将产品分为了3类:①T1:满足几何和辐射质量要求的数据;②T2:不符合T1级别要求的数据;③RT:实时数据,尚未评估的数据(最多需要一个月)。

这里我们点进Landsat8 Surface Reflectance(SR) T1产品进行查看。

 里面由详细的数据产品描述,波段组成,图像属性等等,“ee.ImageCollection("LANDSAT/LC08/C02/T1_L2")”是导入加载影像所需要的关键代码。即这里用到的是“ee.ImageCollection()”这个API函数。如果还不够直观,下面还提供了示例,可供查看。

3.2 加载影像

这里将在“Earth Engine Code Editor”中实现。

3.2.1 绘制感兴趣区

方法一:直接在地图上绘制想要的感兴趣区多边形;

方法二:先通过4.1节的方法上传已有的矢量边界,然后通过如下代码调用:

var collectionName = 'users/city/Nanjing';
var roi = ee.FeatureCollection(collectionName);

 接着导入roi使之显示在地图上,代码如下:

//在地图中心显示感兴趣区roi以及缩放
Map.centerObject(roi, 7);  
//添加一个显示roi的图层并设置参数
Map.addLayer(roi, {color: "red"}, "roi");

 点击 "RUN",运行完之后如下图:

3.2.2 加载landsat 8数据集 

代码如下,以及运行后的结果:

//选择要导出的数据类型
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')  //选择数据集
                .filterBounds(roi) //区域筛选
                .filterDate('2021-06-01', '2021-10-01');  //时间筛选

// Applies scaling factors.即选择所需波段
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true);
}

dataset = dataset.map(applyScaleFactors);

//可视化参数设置
var visualization = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],
  min: 0.0,
  max: 0.3,
};

//添加一个新的显示Landsat8影像的图层
Map.addLayer(dataset, visualization, 'Landsat8');

 3.3 影像的预处理

3.3.1 剔云处理

        可以看到符合该时间段的影像已经被调用并且加载在地图上。但是云量还是没有设定,所以下一步我们将进行剔云处理。核心代码如下:

//去云处理 
function maskL8sr(image) {
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  var qa = image.select('QA_PIXEL');    //注意:Collection2产品中将“pixel_qa”改为“QA_PIXEL”
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}
剔云后,云量控制在了可用范围以内

3.3.2 影像裁切

我们可以发现影像超出研究区所在范围,这里我们实现在地图上完成对影像的裁切,代码如下:

//对影像进行裁切
var l8Img = dataset.mosaic().clip(roi); 


 4、GEE影像上传和导出

4.1 上传本地文件

        要上传和管理地理空间数据集,需要使用代码编辑器中的资产管理器(Assets)。资产管理器位于代码编辑器左侧的资产选项卡上。

点击 “NEW” 图标,我们可以看到如图所示的选项,有栅格类型(.tiff)、矢量类型(.shp)和表格类型(.csv)等.        这里我将本地的 “Nanjing”矢量边界文件上传到GEE当中。

这里需要注意的是,

.shp文件是主文件,存储空间对象的坐标点信息,比如构成点、线、面对象的坐标点序列。

.dbf文件存储空间对象对应的属性表信息,比如一个面对象可能有名称、编码、面积等,这些信息都保存在dbf文件中。这个文件可以用excel单独打开。

.prj文件存储空间坐标系统,指明了shp文件包含的坐标点是在哪个坐标系下的。这个文件是个普通的文本文件,可以用记事本打开。

.shx文件存储索引信息,指明空间对象的隶属关系。

以上四个文件是打开shp主文件所必须的(如果没有prj文件,但此时缺乏地理坐标系统,是不完整的,在GEE上导入会报错),它们共同构成一个完整的shp文件系统,不要丢失。

        

上传成功后,在刷新左侧的菜单栏,可以看到刚刚上传的Nanjing矢量文件,单击进入details界面,可以看到其存放的位置同时也是调用的代码。 


4.2 在GEE上导出影像数据

最后,我们将所选择的遥感数据导出,代码如下:

//导出L8影像  Landsat8 all bands loop to Drive
var bands = l8Img.bandNames().getInfo();

for (var i=0; i<l8Img.bandNames().size().getInfo();i++){
  print(bands[i]);

  Export.image.toDrive({
    image: l8Img.select(bands[i]),        //设置要输出的影像
    fileNamePrefix: "Landsat8_"+bands[i], 
    //folder: "training01",               //设置下载影像在Drive中存储的文件夹名称(可不设置)
    scale:30,    //空间分辨率,单位:米
    description: "Landsat8_"+bands[i],    // 设置下载任务tasks的名称
    maxPixels:1e13,                       //单幅影像输出的最大像元数
    region:roi.geometry().bounds()        //要下载影像的范围
  });
}

         然后我们将影像上传到云端计算机ToDrive,等待上传完成之后即可在云端计算机内下载对应影像,可以根据自己所需要的波段进行下载,很灵活,但是上传到云端的速度其实挺慢的。


 5、GEE共享以及全套代码

 GEE的在线编译器提供共享功能,复制网址即可自动加载页面内的代码,非常实用!

 分享网址:https://code.earthengine.google.com/b0ec40c02823eb3048d0dab9fac60090

//设置感兴趣区域roi
var roi = ee.FeatureCollection("users/knight20211211022/Nanjing");

//定义导出影像数据函数,三个参数
function exportImage(image, region, fileName) { 
  Export.image.toDrive({  
      image: image,  //设置要输出的影像
      description: "Drive-"+fileName,  // 设置下载任务tasks的名称
      fileNamePrefix: fileName,  //设置下载影像的名称
      //folder: "training01",  //设置下载影像在Drive中存储的文件夹名称(可不设置)
      scale: 30, //空间分辨率,单位:米
      region: region,  //要下载影像的范围
      maxPixels: 1e13, //单幅影像输出的最大像元数
      fileFormat:"GeoTIFF", //设置影像导出格式,注意GeoTIFF格式需要所有波段存储类型一致(如不能同时存Int16和Int32)
      crs: "EPSG:4326"  //投影信息,一般是采用默认方式,通常可以设置为EPSG:4326
  }); 
}

//去云处理 
function maskL8sr(image) {
  var cloudShadowBitMask = (1 << 3);
  var cloudsBitMask = (1 << 5);
  var qa = image.select('QA_PIXEL');
  var mask = qa.bitwiseAnd(cloudShadowBitMask).eq(0)
                 .and(qa.bitwiseAnd(cloudsBitMask).eq(0));
  return image.updateMask(mask);
}

// Applies scaling factors.即选择所需波段
function applyScaleFactors(image) {
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);
  return image.addBands(opticalBands, null, true)
              .addBands(thermalBands, null, true);
}

//选择要导出的数据类型
var dataset = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')  //选择数据集
                .filterBounds(roi) //区域筛选
                .filterDate('2021-06-01', '2021-10-01');  //时间筛选


dataset = dataset.map(applyScaleFactors);
dataset = dataset.map(maskL8sr);

//对影像进行裁切
var l8Img = dataset.mosaic().clip(roi); 

//导出L8影像  Landsat8 all bands loop to Drive
var bands = l8Img.bandNames().getInfo();

for (var i=0; i<l8Img.bandNames().size().getInfo();i++){
  print(bands[i]);

  Export.image.toDrive({
    image: l8Img.select(bands[i]),        //设置要输出的影像
    fileNamePrefix: "Landsat8_"+bands[i], 
    //folder: "training01",               //设置下载影像在Drive中存储的文件夹名称(可不设置)
    scale:30,    //空间分辨率,单位:米
    description: "Landsat8_"+bands[i],    // 设置下载任务tasks的名称
    maxPixels:1e13,                       //单幅影像输出的最大像元数
    region:roi.geometry().bounds()        //要下载影像的范围
  });
}

//可视化参数设置
var visualization = {
  bands: ['SR_B4', 'SR_B3', 'SR_B2'],
  min: 0.0,
  max: 0.3,
  gamma:1.4,
};

//添加一个新的显示Landsat8影像的图层
Map.addLayer(l8Img, visualization, 'Landsat8');

//在地图中心显示感兴趣区roi以及缩放
Map.centerObject(roi, 9);  
//添加一个显示roi的图层并设置参数
Map.addLayer(roi, {color: "red"}, "roi");

 OVER!

        最后想说一句,其实 在进行landsat 8 影像数据预处理的时候就可以发现,GEE的一个强大之处在于其可以很方便的自动获取遥感影像,并且直接在上面进行处理和分析。如果只是用作下载影像的话可以说是有点大材小用的了。我们大可直接在平台上进行波段运算,数据研究,分类制图等一系列的操作。笔者也才接触GEE不久,仍在学习中~  吴秋生老师做了很详细的视频介绍,真的很有用!

 

### MMDT与PyCharm的配置教程 为了在PyCharm中成功配置并运行MMDT,以下是详细的设置过程: #### 1. 创建虚拟环境 通过`conda`创建一个新的Python虚拟环境,并激活该环境。这一步可以确保项目的依赖项与其他项目隔离。 ```bash conda create -n mmdet python=3.6 -y conda activate mmdet ``` 上述命令会创建名为`mmdet`的虚拟环境,并将其激活[^1]。 #### 2. 安装必要的依赖包 安装所需的Python库,包括`torch`, `torchvision`, 和`mmcv`。为了避免网络延迟或下载失败的情况,建议使用国内镜像源(如清华大学开源软件镜像站)来加速安装进程。 ```bash pip install torch torchvision pip install mmcv -i https://pypi.tuna.tsinghua.edu.cn/simple ``` 这里特别注意的是,在安装`mmcv`时加入了参数 `-i` 来指定清华源地址,从而提升下载速度[^2]。 #### 3. 下载并编译MMDetection代码仓库 克隆官方GitHub上的`mmdetection`存储库至本地计算机上,并完成其开发模式下的构建操作。 ```bash git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection python setup.py develop ``` 此部分脚本用于获取最新版本框架及其关联组件以便进一步集成到个人研究或者工程项目之中。 #### 4. 配置PyCharm以支持新建立好的Conda Environment 打开PyCharm之后新建一个Project或者是加载已存在的工程;接着前往Settings/Preferences -> Project Interpreter页面下点击齿轮图标选择Add...选项卡中的Existing environment一项最后找到之前所创建出来的那个叫做'mmdet'名字开头的那个解释器路径即可完成整个流程。 另外值得注意的一点就是如果你希望能够在IDE内部直接执行某些特定于该项目的任务的话,则还需要额外确认一下Run Configuration里面是否已经正确设置了相应的Script Path以及Parameters等内容字段值。 #### 关键技术细节补充说明 - **Python_MMDT简介**: Python_MMDT 是一款利用局部敏感哈希(Locality-Sensitive Hashing, LSH) 技术生成特征向量的高效工具集。它由高性能 C 扩展模块构成主体逻辑运算单元并通过高级别的 Python API 接口提供给最终使用者调用便利性[^3]。 - **实际应用场景案分享**: 基于 Python_MMDT 的核心能力——即快速计算两个输入对象之间相似度得分的功能特性,我们可以轻松搭建起一套简易版但又不失实用价值的恶意文件检测分类系统。如下面这条指令就展示了如何针对某个具体目标位置内的所有子元素逐一评估它们各自同参照标准之间的匹配程度关系状况: ```bash $ mmdt-classify . 0.8 1 ``` 这里`.`代表当前工作区根目录; 数字`0.8`设定了最小接受阈限比界限线; 而最后一个参数则指明了选用哪种类别划分策略来进行处理作业活动[^4]。 --- ###
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值