Google Earth Engine基础使用方法(一)

news2024/11/29 22:35:05

Google Earth Engine

  • 1、注册账号
    • 1.1、设置谷歌账号辅助邮箱
    • 1.2、进入Google Earth Engine(如果第一次注册失败怎么办)
    • 1.3、进入Google Earth Engine Editor
  • 2、Editor主界面
    • 2.1、上传自己的矢量数据
    • 2.2、分享代码给别人
    • 2.3、保存代码
    • 2.4、几个有效快捷键
    • 2.5、搜索框有什么用
  • 3、GEE学习资料
    • 3.1、GEE官方文档
    • 3.2、知乎:无形的风
    • 3.3、B站:底数e
  • 4、Open Earth Engine extension
    • 4.1、夜间模式
    • 4.2、一键导入API
  • 5、GEE语法
    • 5.1、矢量数据的关系
      • 5.1.1、Dictionary 常用方法
        • 1、Feature.toDictionary()
        • 2、Feature.get()
        • 3、Feature.keys()
        • 4、Feature.values()
        • 5、Feature.size()
        • 6、Feature.rename()
        • 7、Feature.remove()
        • 8、Feature.contains()
      • 5.1.2、Feature常用函数
        • 1、强制转为Feature类型
        • 2、计算面积和周长
        • 3、计算中心点
        • 4、内接多边形(简化轮廓)
        • 5、外接多边形(简化轮廓)
        • 6、外接矩形(简化轮廓)
        • 7、缓冲区
        • 8、合并
        • 9、距离计算
      • 5.1.3、FeatureCollection常用函数
        • 1、生成随机点
        • 2、map循环
        • 3、统计分析
        • 4、矢量转栅格
    • 5.2、实例演示1:陆丝经济带与成渝经济圈
      • 5.2.1、相交
      • 5.2.2、合并
      • 5.2.3、相差
    • 5.3、实例演示2:一带一路沿线国家与城市
    • 5.4、实例演示3
    • 5.5、实例演示4
  • 6、栅格数据使用方法
    • 6.1、栅格数据存储原理
    • 6.2、栅格数据筛选
    • 6.3、栅格数据镶嵌
    • 6.4、栅格数据裁剪
    • 6.5、栅格数据优化
    • 6.6、实例演示

  • 注意:在操作过程中可能会出现一些或大或小的问题,后续会进行问题记录
  • 所有链接均需魔法才能上

1、注册账号

1.1、设置谷歌账号辅助邮箱

  1. 首先进入谷歌邮箱,登录自己的谷歌邮箱:https://mail.google.com/mail/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在修改邮箱这里,我们要填写辅助邮箱,注意是必须要以 edu 教育邮箱结尾才行,这样才能在Google Earth Engine 注册账号时更快的通过。(这里只需要以 edu 结尾即可,前面的部分自己填写),然后点击 Next

在这里插入图片描述

在这里插入图片描述

由此,我们谷歌邮箱部分就设置好了

1.2、进入Google Earth Engine(如果第一次注册失败怎么办)

  1. 进入 Google Earth Engine 官网:https://earthengine.google.com/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

现在来看一下每一项怎么填:

在这里插入图片描述

在这里插入图片描述

之后进行人机身份验证,点击 SUBMIT,之后打开谷歌邮箱,会发现下面这封邮件,表示注册成功:

在这里插入图片描述


如果第一次注册失败怎么办:

这里内心真是一万个羊驼奔过,GEE和其他平台申请账号不相同,如果你第一次申请失败,会将失败信息发送到你的邮箱,但是你的谷歌账号它不从注册池里删掉,反而你用注册失败的谷歌账号登录它就弹 We're glad you're interested ,一直就是这个界面,导致想重新注册都没法搞。细想大学从开始的Arcgis到现在毕设的GEE,什么时候能有属于国人自己的东西?

在这里插入图片描述

网上解决方法我试了都没有太行,大概提一下:

  1. 删除谷歌账户的GEE服务,但是我的账户显示根本就没有给GEE账户权限,又何来删除一说?
  2. 注销谷歌账号,再重新申请谷歌账号。(注销的那个账户所绑定的手机号一周之内是没法再次申请谷歌账号的,也就是要么等一周,要么换一个手机号)
  3. 淘宝购买

我最终是借用别人的谷歌账号进行的注册…服气了

1.3、进入Google Earth Engine Editor

  1. 打开:https://code.earthengine.google.com/,出现如下界面就表示 大功告成

在这里插入图片描述

2、Editor主界面

2.1、上传自己的矢量数据

  1. 点击 Assets

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  1. 我选择上传了一些矢量文件,右边菜单显示文件上传进度

在这里插入图片描述

2.2、分享代码给别人

我们在控制台编写的代码可以分享链接给别人,这样别人在网页中输入链接就可以打开自己写的代码

注意:首先必须设置 Anyone can read 选项

  1. 点击分享,勾选 Anyone can read

在这里插入图片描述

  1. 点击Get Link ,复制链接发给别人,别人打开就直接可以看到你的代码

在这里插入图片描述

2.3、保存代码

  1. 点击 Save,然后填写名称即可

在这里插入图片描述

2.4、几个有效快捷键

  • ctrl + Enter : 运行代码

  • ctrl + / :代码注释

  • ctrl + space :代码提示

  • ctrl + H :显示替换搜索框,可对代码进行所搜,检索相应的变量并进行替换

2.5、搜索框有什么用

搜索框的功能很强大!例如我们搜索 Landsat 9 的数据,下面的结果集中,我们点击 import 即可导入这个数据。

在这里插入图片描述

注意:我们在选择结果集中的数据时注意两个原则

  1. Collection 2 优先选择
  2. Tier 1 优先选择

之所以遵循这个原则,是因为这么选择的数据是最新更新的!

同时,在数据的 description 字段,有对数据的描述,我们在写论文的时候可以很好的引用描述我们的数据且不会出错!

在这里插入图片描述

3、GEE学习资料

3.1、GEE官方文档

  1. https://developers.google.com/earth-engine/

在这里插入图片描述

在这里插入图片描述

建议:

  1. 看英文有难度的话就"简单"用用
  2. 小白入手"简单"用用
  3. 设置文字为中文-简体没有生效,建议放弃这份官方API,后续熟悉了再看

3.2、知乎:无形的风

在CSDN和知乎同名的老师:无形的风

在这里插入图片描述

3.3、B站:底数e

在这里插入图片描述

4、Open Earth Engine extension

  1. Chrome应用商店 搜索并下载

在这里插入图片描述

4.1、夜间模式

在这里插入图片描述

4.2、一键导入API

  • 在Docs里面的API点击右侧箭头,可以自动将代码填充,并且参数也会填充,我们只需要修改参数即可

在这里插入图片描述

5、GEE语法

GEE语法和JS差别不大,只是使用GEE语法声明的所有变量都是 Object 类型。

在这里插入图片描述

5.1、矢量数据的关系

所有的矢量数据都是以 Geometry、Dictionary、Feature、FeatureCollection 组成的。

在这里插入图片描述

如上图:Feature = Dictionary + Geometry

  • 点数据只有一个点坐标
  • 线数据就是两个点坐标
  • 菱形数据是五个点坐标(因为初始点和结束点坐标要相同)
  • 矩形数据也是五个点坐标

这是一段Link,还记得Link要怎么使用吗?

Link:https://code.earthengine.google.com/433642555753f9158bc970564afe5233

使用方法:复制粘贴浏览器进入

在这里插入图片描述

5.1.1、Dictionary 常用方法

Dictionary 和 Java 中的 Map 集合很像,都是由键值对 key - value 存储。

方法:

  • Feature.toDictionary() : 提取属性

  • Feature.get() : 从属性里面获得某一个键值

  • Feature.keys() :从属性里面获得所有的键

  • Feature.values() :从属性里面获得所有的值

  • Feature.size() :计算属性的数量

  • Feature.rename() :重新命名

  • Feature.remove() :移除某一个键值

  • Feature.contain() : 是否包含某一个键值

Link:https://code.earthengine.google.com/3877580a542fca3f6457ba9e4c987177

1、Feature.toDictionary()

//选择成都市(在 china_city 文件中筛选键为 city,值为 chengdu )
var CD = china_city.filter(ee.Filter.eq('city','chengdu')).first();
// 强制转换为 Feature 类型
CD = ee.Feature(CD);
// 将CD图层添加到 Map 里面
Map.addLayer(CD);
// 打印 CD 图层的信息
print("CD:",CD);

// 调用 toDictionary 方法,打印出成都市图层的 properties 属性
var CD_dic = CD.toDictionary();
print("CD_dic:",CD_dic);

在这里插入图片描述

2、Feature.get()

// 从第一步得到的 properties 中得到 键'city' 所对应的值
var dic_city = CD_dic.get('city');
print("dic_city:",dic_city);   // chengdu

在这里插入图片描述

3、Feature.keys()

// 从第一步得到的 properties 中得到所有的键
var dic_keys = CD_dic.keys();
print("dic_keys:",dic_keys);

在这里插入图片描述

4、Feature.values()

// 从第一步得到的 properties 中得到所有的值
var dic_values = CD_dic.values();
print("dic_values:",dic_values);

在这里插入图片描述

5、Feature.size()

// 从第一步得到的 properties 中得到有多少个键值对
var dic_size = CD_dic.size();
print("dic_size:",dic_size);

在这里插入图片描述

6、Feature.rename()

// 将 properties 中的 provinces 键改为 code
var dic_rename = CD_dic.rename(['provinces'],['code']);
print("dic_rename:",dic_rename);

7、Feature.remove()

// 将 properties 中的 c_code 键移除
var dic_remove = CD_dic.remove(['c_code']);
print("dic_remove:",dic_remove);

8、Feature.contains()

// 看 properties 中是否包含键 c_code
var dic_contains = CD_dic.contains('c_code');
print("dic_contains:",dic_contains); // true

5.1.2、Feature常用函数

Link:https://code.earthengine.google.com/1d25b00c9e8a90306ce12fa3975921a8

1、强制转为Feature类型

  • 强制转为Feature类型 : ee.Feature()
// 定义成都,北京和四川省为研究区
var cd = table.filter(ee.Filter.eq('city','chengdu')).first();
var bj = table.filter(ee.Filter.eq('city','beijing')).first();
var sichuan = table.filter(ee.Filter.eq('provinces','sichuan'));
print("chengdu:",cd)
//将cd和bj强制转换成ee.Feature()
cd = ee.Feature(cd);
bj = ee.Feature(bj);

//显示成都所在范围(锁定地图显示范围中心是成都)
Map.centerObject(cd);
//添加cd图层,属性设置为 color:'red',设置图层名称为chengdu
Map.addLayer(cd,{color:'red'},"chengdu");

// Map.addLayer(cd,{},"chengdu",false,0.2);  添加了cd图层但地图不显示cd图层,若显示的话透明度为0.2

2、计算面积和周长

  • 计算面积:Feature.area()
  • 计算周长:Feature.perimeter()
  • 设置键值对属性:Feature.set({'key':value,'key':value})
//计算面积和周长,并将其添加在属性信息里面
// .divide 的意思是将平方米变为平方千米
var area = cd.area().divide(1000000);
var perimeter = cd.perimeter().divide(1000);
// 设置cd图层键值对属性
cd = cd.set({'area':area,'perimeter':perimeter});
print("cd_area:",cd)

3、计算中心点

  • 计算图层中心点:Feature.centroid()
//中心点
var cdcenterpoint = cd.centroid();
var bjcenterpoint = bj.centroid();
Map.addLayer(cdcenterpoint,{color:'red'},'cdcenterpoint');

在这里插入图片描述

4、内接多边形(简化轮廓)

  • 内接多边形:Feature.simplify()
//内接多边形(误差允许10000米)
var simplify = cd.simplify(10000)
Map.addLayer(simplify,{color:'red'},'simplify');

在这里插入图片描述

5、外接多边形(简化轮廓)

  • 外接多边形:Feature.convexHull()
//外接多边形(误差是10000米)
var convexHull = cd.convexHull(10000)
Map.addLayer(convexHull,{color:'red'},'convexHull');

6、外接矩形(简化轮廓)

  • 外接矩形:Feature.bounds()
//外接矩形
var bounds = cd.bounds()
Map.addLayer(bounds,{color:'red'},'bounds');

7、缓冲区

  • 缓冲区:Feature.buffer()
//缓冲区(10000米的缓冲区)
var buffer = cd.buffer(10000)
Map.addLayer(buffer,{color:'red'},'buffer');

在这里插入图片描述

// 向外扩散10000米的外接矩形(在作卷积运算的时候可能需要用到)
var buffer = cd.buffer(10000).bounds()  
Map.addLayer(buffer,{color:'red'},'buffer');

在这里插入图片描述

8、合并

  • 合并:Feature.union()
//合并四川所有市
var union = sichuan.union()
Map.addLayer(union,{color:'red'},'union');
Map.addLayer(sichuan,{color:'red'},'sichuan');

9、距离计算

  • 距离计算:Feature.distance()
//距离计算(成都的中心和北京的中心的距离除以1000)
var distance = cdcenterpoint.distance(bjcenterpoint).divide(1000);
print('distance:',distance)

5.1.3、FeatureCollection常用函数

Link:https://code.earthengine.google.com/2622a0a9603f0a68e29ad867e2041940

1、生成随机点

  • FeatureCollection.randomPoints()
// 选择研究区(成都和四川省)
var cd = table.filter(ee.Filter.eq('city','chengdu'));
var sichuan = table.filter(ee.Filter.eq('provinces','sichuan'));
// 生成随机点(在成都生成100个随机点)
var randomP = ee.FeatureCollection.randomPoints(cd,100);
// 显示结果(将地图视角居中显示在cd图层,缩放大小为8)
Map.centerObject(cd,8);
// 将成都图层添加,命名为 chengdu
Map.addLayer(cd.geometry(),{},'chengdu');
// 将随机点添加,命名为 randomP
Map.addLayer(randomP,{color:'blue'},'randomP');

在这里插入图片描述

2、map循环

  • FeatureCollection.map(function)
  • FeatureCollection.sort()
// 对四川省进行map循环,得到每个城市的面积
sichuan = sichuan.map(function(city){
  // 对四川省的每个城市进行面积计算再除以1000000,并取整型
  var area = city.area().divide(1000000).toInt();
  // 对每个城市都设置键值对 key = area(km2),value = area
  return city.set({'area(km2)':area});
}).sort('area(km2)');  // 并且根据 area(km2) 对应的值进行排序
print('sichuan:',sichuan)

在这里插入图片描述

3、统计分析

//对四川省每个城市的面积进行统计分析,area(km2) 是面积属性
//四川省城市的最小面积
var area_min = sichuan.aggregate_min('area(km2)');
//四川省城市的最大面积
var area_max = sichuan.aggregate_max('area(km2)');
//四川省城市的平均面积
var area_mean = sichuan.aggregate_mean('area(km2)');
//四川省第一个城市的面积
var area_first = sichuan.aggregate_first('area(km2)');
//四川省城市的总面积
var area_sum = sichuan.aggregate_sum('area(km2)');
//四川省城市的直方图
var area_histogram = sichuan.aggregate_histogram('area(km2)');
print("area_min:",area_min);
print("area_max:",area_max)
print("area_mean:",area_mean)
print("area_first:",area_first)
print("area_sum:",area_sum)
print("area_histogram:",area_histogram)

4、矢量转栅格

  • FeatureCollection.reduceToImage(properties, reducer)
    • properties:属性值
    • reducer:统计方式
//利用面积属性,将矢量转成栅格 
//将四川省的每个城市根据面积属性转换为栅格,统计方式为 ee.Reducer.first(),返回值的波段id命名为 area,并且转成整型
var sichuan_img = sichuan.reduceToImage(['area(km2)'],ee.Reducer.first())
                        .rename('area').toInt();
print(sichuan_img)

// palette 是调色板
var palette = {
    min:4387,  // 面积最小为4387
    max:149761,// 面积最大为 149761
  // 对每个城市都设置不同的颜色  
  palette: ['05450a', '086a10', '54a708', '78d203', '009900', 'c6b044', 'dcd159',
    'dade48', 'fbff13', 'b6ff05', '27ff87', 'c24f44', 'a5a5a5', 'ff6d4c',
    '69fff8', 'f9ffa4', '1c0dff','#d63000', '#bbd605', '#0bd603', '#06d6be'],
};
Map.addLayer(sichuan_img,palette,'sichuan_img');

在这里插入图片描述

每个颜色就是一块,每一块就是一个栅格。注意:

  • 矢量数据设置颜色是color
  • 栅格数据设置颜色是palette

5.2、实例演示1:陆丝经济带与成渝经济圈

Link:https://code.earthengine.google.com/e2a430e48e1227537589e6b8c92a6049

解释下面代码:我们在 china_city 文件中导入陆上丝绸之路的城市和成渝经济圈中心的城市

// 以 china_city 为中心,缩放等级为4显示
Map.centerObject(china_city,4);
// 添加china_city图层
Map.addLayer(china_city)
print(china_city.limit(2))
//新丝绸之路经济带(陆丝)
var theBeltandRoad = china_city.filter(ee.Filter.eq('city','xian')).first().geometry()
            .union(china_city.filter(ee.Filter.eq('city','lanzhou')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','xining')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','chongqing')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','chengdu')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','zhenzhou')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','wuhan')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','changsha')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','nancang')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','hefei')).first().geometry());
// 强制转换为 Feature 类型 ,并且设置键值对
theBeltandRoad = ee.Feature(theBeltandRoad).set({'范围': "新丝绸之路经济带(陆丝)"});
print(theBeltandRoad)
Map.addLayer(theBeltandRoad,{color:'red'},"theBeltandRoad");
//成渝经济圈中心城city
var chengyu = china_city.filter(ee.Filter.eq('city','chengdu')).first().geometry()
            .union(china_city.filter(ee.Filter.eq('city','chongqing')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','mianyang')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','deyang')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','leshan')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','yibin')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','luzhou')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','nanchong')).first().geometry())
            .union(china_city.filter(ee.Filter.eq('city','dazhou')).first().geometry());

// 强制转换为 Feature 类型 ,并且设置键值对
chengyu = ee.Feature(chengyu).set({'范围': "成渝经济圈中心城市"});
print(chengyu)
Map.addLayer(chengyu,{color:'blue'},"chengyu");

上述代码过于冗余,我们实际中会用 ee.Filter.inList('key',['value1','value2']) 简化写法

//新丝绸之路经济带(陆丝)
var theBeltandRoad = china_city.filter(ee.Filter.inList('city',['xian','lanzhou','xining',
'chongqing','chengdu','zhenzhou','wuhan','changsha','nancang','hefei']));

// 强制转换为 Feature 类型 ,并且设置键值对
theBeltandRoad = ee.Feature(theBeltandRoad).set({'范围': "新丝绸之路经济带(陆丝)"});
print(theBeltandRoad)
Map.addLayer(theBeltandRoad,{color:'red'},"theBeltandRoad");

5.2.1、相交

  • 相交:Feature.intersection()
// 将入陆上丝绸之路的城市和成渝经济圈中心的城市相交
var Intersection = theBeltandRoad.geometry().intersection(chengyu.geometry())
Map.addLayer(Intersection,{color:'grey'},"Intersection");

在这里插入图片描述

5.2.2、合并

  • 合并:Feature.union()
// 合并就是二者所有的城市
var Union = theBeltandRoad.geometry().union(chengyu.geometry())
Map.addLayer(Union,{color:'yellow'},"Union");

5.2.3、相差

  • 相差:Feature.difference()
// 也就是把相交的城市减去
var Difference = theBeltandRoad.geometry().difference(chengyu.geometry())
Map.addLayer(Difference,{color:'Purple'},"Difference");

5.3、实例演示2:一带一路沿线国家与城市

Link:https://code.earthengine.google.com/ff69b8b0e98e03417bdd55e733a0759c

//设置显示风格
// fillColor:填充颜色,前两个0代表红色,接着两个0代表绿色,接着两个0代表蓝色,最后两个0代表空心,1代表实心
var styling1 = {fillColor:'00000000',color:'red'};
var styling2 = {fillColor:'00000000',color:'blue'};
var styling3 = {fillColor:'00000000',color:'yellow'};



// 一带一路沿线及其经过国家
// 在word图层中中过滤跟一带一路相交的位置
var theBeltandRoad_country = word.filterBounds(theBeltandRoad_line);
// styling1 表示红色,表示一带一路的连线
Map.addLayer(theBeltandRoad_line.style(styling1),{},'theBeltandRoad_line')
// styling2 表示蓝色,表示一带一路所经历的国家
Map.addLayer(theBeltandRoad_country.style(styling2),{},'theBeltandRoad_country')


//一带一路的城市
// 筛选出中国的经过一带一路的城市
var theBeltandRoad_city = china_city.filterBounds(theBeltandRoad_line);
Map.addLayer(china_city,{},"china_city");
// styling2 表示黄色,表示中国的经过一带一路的城市
Map.addLayer(theBeltandRoad_city.style(styling3),{},'theBeltandRoad_city')

5.4、实例演示3

  • 后续更新

5.5、实例演示4

  • 后续更新

6、栅格数据使用方法

6.1、栅格数据存储原理

在这里插入图片描述

所有的栅格数据都是由 Image、Image collection 组成存储,波段Band组合成 image,image 组合成 Image collection

Link:https://code.earthengine.google.com/7dcce69b66936b8300307b68ef7c6a04

  • ee.ImageCollection([image1,image2,image3]) : image 转换成 ImageCollection
  • imageCollection.toBands() :ImageCollection 转换成 image
// 创建3幅影像,值是1、2、3
var image1 = ee.Image(1);
var image2 = ee.Image(2);
var image3 = ee.Image(3);
// 3幅影像以列表的形式组成imageCollection
var imageCollection = ee.ImageCollection([image1,image2,image3])
// imageCollection 转换成 image
var image_bands = imageCollection.toBands()
print('image1',image1);
print('imageCollection',imageCollection)
print('image_bands',image_bands)

6.2、栅格数据筛选

在这里插入图片描述

  • 时间筛选:ImageColelction.filterDate('2020-01-01','2020-12-31')
  • 位置筛选:ImageColelction.filterBounds(roi)
  • 属性筛选:ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',75) 筛选云的像素百分比小于75的

Link:https://code.earthengine.google.com/658731ec3f9d0d5fb6f5edb3bd837ec6

//筛选时间
var startDate = '2020-03-01'
var endDate = '2020-10-01'
//对S2影像进行时间筛选,时间范围是 2020-03-01 - 2020-10-01 ,筛选与 table 区相交的位置,筛选云含量小于20的
var S2_raw = S2.filterDate(startDate, endDate)
              .filterBounds(table)
              .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))

Map.addLayer(S2_raw,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw')
print('S2_raw:',S2_raw)

6.3、栅格数据镶嵌

  • ImageColelction.first() :取出第一张影像()
  • ImageColelction.mean():取出影像数据集合的均值
  • ImageColelction.median() :取出影像数据集合的中值
  • ImageColelction.mosaic():取出影像数据集合的最后一个有效值

Link:https://code.earthengine.google.com/468693866b99f6cc60bbea57e0804079

//选择S2影像云含量小于50%
//时间筛选是 2020-06-01 - 2020-10-01,没有进行位置筛选,而是进行了属性筛选,筛选属性 MGRS_TILE(图符号) 是 48RUV,同时筛选含云量小于50%的影像
var S2_raw1 = S2.filterDate('2020-06-01', '2020-10-01')
             // .filterBounds(roi)
               .filter(ee.Filter.eq('MGRS_TILE','48RUV'))
               .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE",50))//筛选最小云量
              // .mosaic()
print("S2_raw1:",S2_raw1)

在这里插入图片描述

// 取出影像集合的最后一个有效值
var S2_raw1_mosaic = S2_raw1.mosaic()
// 取出影像集合的均值
var S2_raw1_mean = S2_raw1.mean()
// 取出影像集合的中值
var S2_raw1_median = S2_raw1.median()
Map.addLayer(S2_raw1_mosaic,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw1_mosaic');
Map.addLayer(S2_raw1_mean,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw1_mean')
Map.addLayer(S2_raw1_median,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw1_median')
  • 代码解释如下
//选择S2影像云含量小于50%
//时间筛选是 2020-06-01 - 2020-10-01,没有进行位置筛选,而是进行了属性筛选,筛选属性 MGRS_TILE(图符号) 是 48RVV,同时筛选含云量小于50%的影像,筛选出影像集合后取影像集合的最后一个有效值
var S2_raw2_median = S2.filterDate('2020-06-01', '2020-10-01')
              // .filterBounds(roi)
              .filter(ee.Filter.eq('MGRS_TILE','48RVV'))
              .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE",50))//筛选最小云量
              .mosaic()
Map.addLayer(S2_raw2_median,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw2_median')
  • 影像拼接:ee.ImageCollection().mosaic()
// 将上述两幅影像拼接
var image_mosaic = ee.ImageCollection([S2_raw1_median,S2_raw2_median]).mosaic()
print('image_mosaic',image_mosaic)
Map.addLayer(image_mosaic,{min:0,max:3000,bands:['B4','B3','B2']},'image_mosaic')

6.4、栅格数据裁剪

  • Image.clip() 影像裁剪

Link:https://code.earthengine.google.com/b3073174ac609d9d3757c391c24106cb

//定义研究区(矢量数据选择成都)
var cd = table.filter(ee.Filter.eq('city','chengdu'));
var styling = {color:'red',fillColor:'00000000'};
//选择S2影像云含量小于20%
//筛选时间 2020-06-01 - 2020-10-01,筛选位置为cd,筛选含云量小于20%,然后取出影像集合的中值
var S2_raw1_median = S2.filterDate('2020-06-01', '2020-10-01')
                .filterBounds(cd)
                .filter(ee.Filter.lt("CLOUDY_PIXEL_PERCENTAGE",20))//筛选最小云量
                .median()
//将结果在地图上显示
Map.addLayer(S2_raw1_median,{min:0,max:3000,bands:['B4','B3','B2']},'S2_raw1_median')
//裁剪影像,裁剪范围是cd
var S2_clip = S2_raw1_median.clip(cd)
//将裁剪后的影像添加道地图
Map.addLayer(S2_clip,{min:0,max:3000,bands:['B4','B3','B2']},'S2_clip')
Map.addLayer(cd.style(styling),{},'chengdu')

在这里插入图片描述

6.5、栅格数据优化

Link:https://code.earthengine.google.com/578b624de2add37cd7b2552744454af3

3种优化

var styling = {color:'red',fillColor:'00000000'}
// 筛选出上海
var roi = table.filter(ee.Filter.eq('city','shanghai'))
// 筛选时间 2020-06-01 - 2020-10-01,筛选位置为roi,然后取出影像集合的中值,并裁剪出roi
var img_1 = S2.filterDate('2020-06-01','2020-10-01')
            .filterBounds(roi)
            .median()
            .clip(roi)
// 筛选时间 2020-06-01 - 2020-10-01,筛选位置为roi,筛选含云量小于20%,然后取出影像集合的中值,并裁剪出roi
var img_2 = S2.filterDate('2020-06-01','2020-10-01')
            .filterBounds(roi)
            .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
            .median()
            .clip(roi)
       
// 筛选时间 2020-06-01 - 2020-10-01,筛选位置为cd,根据含云量对15幅影像进行排序(默认升序),然后取出影像集合的中值,并裁剪出roi
var img_3 = S2.filterDate('2020-06-01','2020-10-01')
            .filterBounds(roi)
            // .filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE',20))
            .sort('CLOUDY_PIXEL_PERCENTAGE')
            .limit(15)
            .median()
            .clip(roi)
Map.addLayer(img_1,{min:0,max:3000,bands:['B4','B3','B2']},'img_1')
Map.addLayer(img_2,{min:0,max:3000,bands:['B4','B3','B2']},'img_2')
Map.addLayer(img_3,{min:0,max:3000,bands:['B4','B3','B2']},'img_3')
Map.centerObject(roi);
Map.addLayer(roi.style(styling),{},'roi')

在这里插入图片描述

6.6、实例演示

  1. JRC水体数据

Link:https://code.earthengine.google.com/2d06b4855f20129a4f61c9b7de0a8ecb

// 筛选出上海
var roi = table.filter(ee.Filter.eq('city','shanghai'))
var styling = {color:'black',fillColor:'00000000'}
//筛选JRC数据
var water_mask = ee.ImageCollection('JRC/GSW1_4/YearlyHistory')
                .filterDate('2021-01-01','2022-01-01') //筛选时间
                .first() // 将ImageCollection转换成image
                .clip(roi) //裁剪范围
                .gt(2) //值大于2的为常年水
                .selfMask(); //对值为0的去除
                
// 显示JRC栅格数据

Map.addLayer(water_mask,{palette:'0000ffff'},'water_mask')
Map.addLayer(roi.style(styling),{},'roi')
  1. GAIA不透水面数据

Link:https://code.earthengine.google.com/fbeab5a1121b6b861e601c964687a429

//显示中国的范围
var styling = {color:'black',fillColor:'00000000'};
Map.addLayer(roi.style(styling),{},'roi')
Map.centerObject(roi,4)
// 选择出1999年及以后年份
var GAIA_USA = GAIA.clip(roi);
// 批量输出
for (var i = 1;i<20;i++){
  var num = 2019-i; //从2017年到1999年
  Map.addLayer(GAIA_USA.gte(i).selfMask(),{palette:'red'},'GAIA'+num)
}
  1. ESA土地利用分类数据

Link:https://code.earthengine.google.com/5da398907cc639080b7e6533b35cec7f

// 筛选出四川
var roi = table.filter(ee.Filter.eq('provinces','sichuan'))
// 裁剪出roi
var img = imageCollection.first().clip(roi);
var visualization = {
  bands: ['Map'],
};
Map.addLayer(img, visualization, "Landcover");
Map.addLayer(roi.style({color:'ff0000',fillColor:'00000000'}))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP S/4 FAGLGVTR错误解决

本次年结支持过程中&#xff0c;一个客户的年结操作出现问题&#xff0c;问题的解决还颇费周折&#xff0c;稍稍记录一下。客户的SAP 版本是 S/4, 通过 FAA_CMP 事务码切换固定资产年度的时候&#xff0c;提示上一已关闭的会计年度与当前会计年度相同。 这个消息的意思是FI 的会…

【自学Python】Python字符串出现次数

Python字符串出现次数 Python字符串出现次数教程 在开发过程中&#xff0c;很多时候我们有统计单个字符或者 字符串 在另一个字符串中出现次数的需求&#xff0c;在 Python 中&#xff0c;统计字符串出现次数我们使用 count() 函数。 Python count()函数详解 语法 S.count…

Python实战项目1——自动获取小说工具

&#x1f935;‍♂️ 个人主页老虎也淘气 个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f44d;&#x1f3fb; 收藏…

【C++】二叉树进阶OJ题

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《吃透西嘎嘎》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;根据二叉…

前端开发:Webpack的使用总结

前言 在前端开发过程中&#xff0c;尤其是现在前端框架的频繁使用的当下&#xff0c;作为前端开发者想必对于Webpack并不陌生&#xff0c;尤其是在使用Vue框架做前端开发的时候&#xff0c;打包时候必用Webpack。还有就是在前端求职面试的时候&#xff0c;Webpack相关的知识点…

mysql新建分区设置阈值(less than)引发的问题

mysql新建分表后&#xff0c;入库之前分表区间的数据&#xff0c;但是再分表中查询不到对应数据。 文章目录问题背景问题解析新建分区sql查看分区查询数据查询数据所在分区修改方案总结LESS THAN相关sql查询分区删除分区先建分区问题背景 初始化表的时候&#xff0c;先建的日期…

(二)Jenkins全局工具配置

目录 1、插件管理 2、Gitee安装 2.1、插件安装 2.2、查看Gitee状态 2.3、配置Gitee 2.4、获取私人令牌 2.5、测试连接 3、全局配置jdk、ant、maven 3.1、jdk配置 3.2、ant配置 3.3、maven配置 4、插件镜像下载地址配置 (一)Jenkins部署、基础配置介绍在windows下安…

事务(transaction)

事务&#xff08;重点 五颗星 ***** 必须理解 必须掌握&#xff09; 1、什么是事务&#xff1a; 一个事务其实就是一个完整的业务逻辑。 假设转账&#xff0c;从A账户向B账户转账10000.将A账户的钱减去10000&#xff08;update语句&#xff09;&#xff0c;将B账 户的钱增加100…

【手写 Vue2.x 源码】第二十六篇 - 数组依赖收集的实现

一&#xff0c;前言 上篇&#xff0c;主要介绍了数组依赖收集的原理 本篇&#xff0c;数组依赖收集的实现 二&#xff0c;对象依赖收集的总结 {}.dep > watcher 目前&#xff0c;“对象本身”和“对象中的每一个属性”都拥有一个 dep 属性&#xff0c;用于做依赖收集 此…

Leetcode:669. 修剪二叉搜索树(C++)

目录 问题描述&#xff1a; 实现代码与解析&#xff1a; 递归&#xff1a; 原理思路&#xff1a; 后序递归&#xff1a; 原理思路&#xff1a; 迭代&#xff1a; 原理思路&#xff1a; 问题描述&#xff1a; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界…

#9文献学习--基于元强化学习的边缘计算快速自适应任务卸载

文献&#xff1a;Fast Adaptive Task Offloading in Edge Computing based on Meta Reinforcement Learning 基于深度强化学习DRL的方法&#xff0c;样本效率很低&#xff0c;需要充分的再培训来学习新环境的更新策略&#xff0c;对新环境的适应性很弱。 基于元强化学习的任务…

【数据结构与算法】第十八篇:递归,尾递归,尾调用

知识概览一、递归的引入&#xff08;递归现象&#xff09;二、递归的调用过程与实例分析三、递归的基本思想小tip:链表递归的具体实例四、递归的一般使用条件五、实例分析&#xff1a;斐波那契数列1.原理剖析2.fib优化1 – 记忆化3.fib优化24.fib优化3六、实例分析&#xff1a;…

mac下ssh连接docker使用centos

配置ssh连接docker本机信息 Apple M2/ macOS Ventura 13.1完整实现如下&#xff1a;使用docker下载centos镜像docker pull centos:centos7 # centos7 指定安装版本查看本地镜像# 使用以下命令查看是否已安装了centos7➜ ~ docker images REPOSITORY TAG IMAGE ID …

c++通讯录管理系统

结构体1&#xff0c;知识点&#xff08;结构体&#xff09;&#xff0c;存放人员详情&#xff0c;名字&#xff0c;性别&#xff0c;年龄等 struct person { string m_name; int m_sex; int m_age; string m_phone; string m_addr; };结构体2&#xff0c;知识点 &#xff08;结…

狗厂的N+1+2毕业,我觉得还是挺良心的

最近又跟朋友打听到了新鲜事&#xff0c;年底的新鲜事&#xff0c;什么209万&#xff0c;就是听个乐子&#xff0c;离我太远&#xff0c;什么HR和技术人员产生矛盾&#xff0c;一巴掌眼镜都打飞了&#xff0c;好乱套&#xff0c;今天我跟朋友打听了一些不太乱套的 一、鹅肠 1.…

Quartz认知篇 - 初识分布式任务调度Quartz

定时任务的使用场景 在遇到如下几种场景可以考虑使用定时任务来解决&#xff1a; 某个时刻或者时间间隔执行任务 批量数据进行处理 对两个动作进行解耦 Quartz 介绍 Quartz 是一个特性丰富的、开源的任务调度库&#xff0c;几乎可以嵌入所有的 Java 程序&#xff0c;包括很…

基于二叉树的改进SPIHT算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

电脑怎么设置动态壁纸?关于Windows和Mac壁纸的设置方法

为了让电脑桌面更加美观舒适&#xff0c;很多人都会给电脑的桌面设置自己喜欢的壁纸。图片壁纸很多人都会设置&#xff0c;但是电脑怎么设置动态壁纸&#xff1f;这是很多人的困扰。其实方法同样很简单&#xff0c;下面有关于Windows和Mac动态壁纸的设置方法&#xff0c;一起来…

【阶段四】Python深度学习03篇:深度学习基础知识:神经网络可调超参数:激活函数、损失函数与评估指标

本篇的思维导图: 神经网络可调超参数:激活函数 神经网络中的激活函数(有时也叫激励函数)。 在逻辑回归中,输入的特征通过加权、求和后,还将通过一个Sigmoid逻辑函数将线性回归值压缩至[0,1]区间,以体现分类概率值。这个逻辑函数在神经网络中被称为…

PyCharm调用远程Python解释器

PyCharm调用远程Python解释器 PyCharm中直接调用远程服务器中Python解释器&#xff1a; 本地不用搭建Python环境。既避免了本地使用Window而服务器使用Linux系统不统一情况&#xff0c;又不用担心本地调试没问题而放到服务器上就出现问题。 PyCharm中打开项目并设置Python解释…