目录

1. 过滤 ee.Filter

1.1 日期过滤filterDate()

1.2 空间过滤filterBounds()

1.3 属性过滤filterMetadata()

1.4 filter

2. 计算 ee.Reducer

3. 联合 ee.Join

4. 循环遍历

4.1 map循环

4.2 iterate循环

5. 数据导出 Export

5.1 影像数据

5.2 矢量数据

5.3 视频数据

6. 图标展示 ui.Chart

6.1 ui.Chart.array.values

6.2 ui.Chart.feature

6.3 ui.Chart.image


在GEE中,常用的操作方法如下:

1. 过滤 ee.Filter

在GEE中,所有的几何数据如FeatureCollection、ImageCollection等中都有封装好的过滤方法,分别为:日期过滤filterDate()、空间过滤filterBounds()和属性过滤filterMetadata(),以及一个通用的过滤方法filter。

1.1 日期过滤filterDate()

基础语法:

filterDate(start, end)

按日期范围过滤集合。开始和结束可能是日期、数字(解释为自 1970-01-01T00:00:00Z 以来的毫秒数)或字符串(例如 '1996-01-01T08:00')。基于 'system:time_start' 属性。

这个方法在底层需要去查询集合中的每一个元素属性列表中的属性system:time_start,如果元素没有system:time_start这个属性,那么就没有办法使用日期过滤方法。

示例代码:

var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var p1 = ee.Geometry.Point([-100.91289062499999,37.07682857623016]);
//筛选2018-1-1至2018-2-1日期内,在p1范围内的影像数据,返回影像数据集
var imgCol=l8.filterDate("2018-1-1","2018-2-1").filterBounds(p1);
var img =imgCol.first();
print("image geometry:" ,img.geometry());
Map.addLayer(img,{bands:["B4","B3","B2"],MIN:0,MAX:0.3},"IMG");
Map.addLayer(img.geometry(),{color:"red"},"img_roi")

输出结果:

1.2 空间过滤filterBounds()

基础语法:

filterBounds(geometry)

filterBounds(geometry)是用于进行空间过滤的方法,这个方法的判断依据是两个适量边界是否相交即判断两个矢量数据是否有相交。但对于影像数据及和做空间过滤有些不同,首先需要声明一个集合的特殊属性--“影像数据包含本身的集合图形属性”,是影像边界或者是影像的外界矩形,属性名称通常是system:footprint,获取单张影响包含的几何图形直接使用image.geometry()。

注意:提供大型或复杂的集合作为geometry参数可能会导致性能下降。整理集合的几何形状并不能很好地扩展;使用实现预期结果所需的最小集合(或几何)。

示例代码:

var l8 = ee.ImageCollection("LANDSAT/LC08/C01/T1_TOA");
var p1 = ee.Geometry.Point([-100.91289062499999,37.07682857623016]);
//筛选2018-1-1至2018-2-1日期内,在p1范围内的影像数据,返回影像数据集
var imgCol = l8.filterDate("2018-1-1","2018-2-1").filterBounds(p1);
var img =imgCol.first();
print("image geometry:" ,img.geometry());
Map.addLayer(img,{bands:["B4","B3","B2"],MIN:0,MAX:0.3},"IMG");
Map.addLayer(img.geometry(),{color:"red"},"img_roi")
//构造一个几何图形属性为外接矩形的影像
var b1 = img.select("B1").add(1);
Map.addLayer(b1,{min:1,max:1.3},"ndvi");
Map.addLayer(b1.geometry(),{color:"blue"},"ndvi_roi");

上述代码通过选定指定位置的landsat影像,并输出了筛选的影像的几何图形数据信息,控制台输出及运行效果如下:

//生成新的影像集合重新使用p2做过滤var p2=ee.Geometry.Point([-101.63798828124999,38.255175928901245]);
var firImgCol = ee.ImageCollection.fromImages([img]).filterBounds(p2);
print("firImgCol", firImgCol);
var secImgCol = ee.ImageCollection.fromImages([b1]).filterBounds(p2);
print("secImgCol", secImgCol);
Map.addLayer(p1, {color:"black"}, "p1");
Map.addLayer(p2, {color:"green"}, "p2");

上述代码用来测试如果p2在img的几何图形外,但在b1的几何图形内,输出结果可以烂到firImgCol是空的,但是secImgCol是能筛选出来的:

1.3 属性过滤filterMetadata()

基础语法:

filterMetadata(name, operater, value)

该方法在实际开发时使用较少,其中name指指定的名字,也就是数据集中每一个元素对应的属性名称,通过操作operater(如equals、less_than)和给定的值做判断,过滤出符合条件的数据。在实际开发中,经常用ee.Filter.eq()\ee.Filter.lte()等形式替代。

1.4 filter

filter是最通用的方法,常用的filter操作方法如下:

方法名称 方法含义 参数
ee.Filter.or 或者操作:用来合并多个filter条件,意思是只要满足其中一个条件就可以被筛选出来。 var_args:多个filter
ee.Filter.and 与操作:用来合并多个filter条件,意思是必须满足所有的条件才可以被筛选出来。 var_args:多个filter
ee.Filter.calendarRange 根据指定的日期格式筛选数据。

start:开始日期

end:结束日期

field:日期格式,如year、month、hour、minute、day_of_year、day_of_month、day_of_week.....

ee.Filter.eq 根据属性值是否和指定的数据相等实现过滤。

name:属性名称

value:过滤值

ee.Filter.lte 根据属性值是否小于等于指定的数据实现过滤。

name:属性名称

value:过滤值

ee.Filter.inList 根据指定的属性值是否在列表中实现过滤。

leftField:第一个集合中属性名称;

rightValue:第一个集合属性过滤值;

rightField:第二个集合中属性名称;

leftValue:第二个集合属性过滤值;

示例(1):

提取2015年1-3月的path44或row为34的数据:

var Col = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA');
var sCol = Col.filterDate('2014-01-01', '2014-02-01').filter(ee.Filter.or(ee.Filter.eq("WRS_PATH",44),ee.Filter.eq("WRS_ROW",34)));
print("select image collection:", sCol);

实现效果:

 示例(2):

提取指定地区每年第1天到第31天的数据,也就是每年一月的数据:

import geometry;
Map.centerObject(geometry,8);
var sCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filterBounds(geometry).filter(ee.Filter.calendarRange(1,31,"day_of_year"));
print(sCol);

输出结果:

 示例(3):

指定属性system:index列表,只获取此列表内的数据:

//ee.Filter.inList
var sCol = ee.ImageCollection('LANDSAT/LC08/C01/T1_TOA').filter(ee.Filter.inList({leftField: "system:index",rightValue:["LC08_123032_20170115","LC08_123032_20180118"]
}));
print(sCol);

输出结果:

2. 计算 ee.Reducer

在GEE中,有许多reducer可以供用户使用,具体使用方法可查看上一章笔记中3.4.3部分的内容。

下面以reducer中的group为例,统计不同类别的像素个数:

//roi选取辽宁省大连市(用户自己上传),数据使用的是2016-2017年的modis地表分类数据集合
var countries = ee.FeatureCollection("users/HM_hhxx/LNcityShp");
var roi = countries.filter(ee.Filter.eq("enName","dalian"));
Map.centerObject(countries, 7);
Map.addLayer(countries);
print(roi)
Map.addLayer(roi,{},"roi");
var bounds = roi.geometry().bounds();
var landCover = mcd12ql.filterDate("2016-1-1","2017-1-1").select("LC_Type1").first().clip(roi);
print("landCover", landCover);
//加载土地类型影像
Map.addLayer(landCover, {min:1, max:17},"landCover");
//生成新的影像并添加土地分类波段
var image = ee.Image.constant(1).addBands(landCover);
var dict = image.reduceRegion({reducer: ee.Reducer.count().group({groupField: 1,groupName: "landType"}),geometry: roi,scale: 500,maxPixels: 1e13
});
print(dict)

输出结果:

分类结果影像:

3. 联合 ee.Join

在GEE中的联合(ee.join)通过利用Filter中的特殊筛选条件,提取两个不同集合中满足条件的所有元素。GEE中提供的join方法如下图所示,常用的有ee.Join.simple(),ee.Join.saveAll()。

 ee.Join.simple()示例:

简单联合,返回的是一个join对象,并可以通过调用join的其他方法进行操作,例如join.apply()。

下例中,找出集合A和集合B中指定列中相同的元素,然后取出A集合中对应的所有元素,p1=1和p2=2的元素。

var primaryCol = ee.FeatureCollection([ee.Feature(null, {p1:0, p2:"a"}),ee.Feature(null, {p1:1, p2:"b"}),ee.Feature(null, {p1:2, p2:"c"})
]);
var secondaryCol = ee.FeatureCollection([ee.Feature(null, {p3:1, p2:"d"}),ee.Feature(null, {p3:2, p2:"e"}),ee.Feature(null, {p3:3, p2:"f"})
]);
//构建新的filter
var filter = ee.Filter.equals({leftField:"p1",rightField:"p3"
});
var join = ee.Join.simple();
var result = join.apply(primaryCol, secondaryCol, filter);
print("join result", result)

输出结果:

4. 循环遍历

4.1 map循环

基础语法:

fCol=fCol.map(function(feature){........
})

循环操作中需要注意的内容:

1)map操作必须有返回值,不同集合的返回值不同,如featureCollection返回值是feature,imageCollection返回值是image等。

2)map操作中不要用print()方法。

3)map操作中不能使用ui.Chart、Export导出等方法。

4)不要用getInfo()来获取列表长度作为循环条件来操作for循环。

4.2 iterate循环

iterate是GEE中为了弥补map循环的缺点新增的循环方法,map循环的缺陷是只能对集合的所有元素进行循环处理,但是没有办法操作它目前具体索引或前后其他元素数据。iterate循环定义了一个初始值,然后遍历集合的具体元素,这样就可以实现初始值和这个元素的操作,最后返回相关结果重新赋值给初始值。

基础语法:iterate(algorithm,first)

(1)参数algorithm是回调方法,即每一次循环要调用的方法,格式为

function(element_data, first_data){....
}

element_data:集合的每一个元素;
first_data:初始化定义的first数据,返回值是计算的结果并且会重新赋值给first;
(2) 参数first定义的初始化值无需是列表类型,但它最终和想要获得的结果是同一个类型值。

5. 数据导出 Export

5.1 影像数据

1. Export.image.toAsset 影像数据导出到Asset

基础语法:

Export.image.toAsset(image, description, assetId, pyramidingPolicy, dimensions, region, scale, crs, crsTransform, maxPixels)

其中参数如下:

image 需要导出的影像
description 到处任务的描述
assetId 资源名称,也就是在Asset文件夹中看到的资源名称
pyramidingPolicy 波段值计算公式,为对象值。计算方式包括:mean、sample、min、max、mode。这个值通常不会设置,都采用默认值。示例:{'B4':'mean'}意思是波段名称为B4的波段采用mean的方式计算
dimensions 导出Image的宽和高
region 导出的区域,是一个Geomtry
scale 分辨率,单位米,如30m
crs 投影信息,通常为EPSG:4326

crsTransform

定义仿射变换的参数,具体参数为[xScale,xShearing,xTranslation,yShearing,yScale,yTranslation]
maxPixels 导出影像的最大像素个数,默认是设置”le8“,通常可以设置为”le13“防止导出时报错

示例:

导出B1波段的l8影像,设置描述,导出至training01/l8ImgB1-01,分辨率为30m,区域为roi范围的影像:

Export.image.toAsset({image: l8Img.select("B1"),description:"Asset-l8ImgB1-01",assetId:"training01/l8ImgB1-01",scale:30,region:roi});

2. Export.image.toDrive 影像数据导出到Drive

基本语法:

Export.image.toDrive(image, description, folder, fileNamePrefix, dimensions, region, scale, crs, crsTransform, maxPixels, shardSize, fileDimensions, skipEmptyTiles, fileFormat, formatOption)
image 需要导出的影像
description 到处任务的描述
folder 在Assets中的文件夹名称,也就是用户自己创建的文件夹。如果不传此参数,那么导出的文件会直接放在Assets根目录下,通常都不会传此参数
fileNamePrefix 导出资源的名称,如果默认的不穿,那么会直接采用description作为导出的文件的名称
region 导出的区域,是一个Geomtry
scale 分辨率,单位米,如30m
crs 投影信息,通常为EPSG:4326

crsTransform

定义仿射变换的参数,具体参数为[xScale,xShearing,xTranslation,yShearing,yScale,yTranslation]
maxPixels 导出影像的最大像素个数,通常可以设置为”le13“防止导出时报错

5.2 矢量数据

1. Export.table.toAsset 矢量数据导出到Asset

Export.table.toAsset(collection, description, assetId)
collection 需要导出的矢量数据集合
description 导出任务描述
assetId 在GoogleAssets中资源标识名字

2. Export.table.toDrive 矢量数据导出到Drive

Export.table.toDrive(collection, description, folder, fileNamePrefix, fileFormat, selectors)
collection 需要导出的矢量数据集合
description 导出任务描述
folder 在GoogleDrive中的文件夹名称。如果不传此参数,那么导出的文件会直接放在Google Drive根目录下。
fileNamePrefix 导出的资源名称,如果默认的不传,那么会直接采用description作为导出的文件名称
fileFormat 文件的格式,支持导出GeoJson、KML、KMZ、CSV、SHP、TFRecord格式,其中CSV是默认的参数
selectors 筛选下载的矢量数据中包含哪些属性,默认是包含全部属性

5.3 视频数据

1.Export.video.toCloudStorage

Export.video.toCloudStorage(collection, description, bucket, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames)
collection(ImageCollection) 要导出的图像集合。
description(字符串,可选): 任务的人类可读名称。默认为“myExportVideoTask”。
bucket(字符串,可选): Cloud Storage 目标存储分区。
fileNamePrefix(字符串,可选): 用作输出前缀的字符串。结尾的“/”表示路径。默认为描述。
framesPerSecond(数字,可选) 导出视频的帧率。必须是介于 0.1 和 100 之间的值。默认为 1。
dimensions(数字|字符串,可选)

用于导出图像的尺寸。将单个正整数作为最大维度或“WIDTHxHEIGHT”,其中 WIDTH 和 HEIGHT 均为正整数。

region(Geometry.LinearRing|Geometry.Polygon|String,可选) 表示要导出的区域的线性环、多边形或坐标。这些可以指定为几何对象或序列化为字符串的坐标。
scale(数字,可选) 以米/像素为单位的分辨率。
crs(字符串,可选) 用于导出图像的 CRS。默认为谷歌地图墨卡托投影,SR-ORG:6627。
crsTransform(字符串,可选) 用于导出图像的仿射变换。需要定义“crs”。
maxPixels(数字,可选) 限制导出中的像素数。默认情况下,如果导出超过 1e8 像素,您将看到错误。显式设置此值允许提高或降低此限制。
maxFrames(数量,可选) 设置要导出的最大帧数。默认情况下,最多可以导出 1000 帧。通过明确设置,您可以提高或降低此限制。

 2.Export.video.toDrive

Export.video.toDrive(collection, description, folder, fileNamePrefix, framesPerSecond, dimensions, region, scale, crs, crsTransform, maxPixels, maxFrames)
collection(ImageCollection) 要导出的图像集合。
description(字符串,可选) 任务的人类可读名称。可能包含字母、数字、-、_(无空格)。默认为“myExportVideoTask”。
folder(字符串,可选) 导出将驻留的 Google Drive 文件夹。注意:(a) 如果文件夹名称存在于任何级别,则将输出写入其中,(b) 如果存在重复的文件夹名称,则将输出写入最近修改的文件夹, (c) 如果文件夹名称不存在,将在根目录创建一个新文件夹,并且 (d) 带有分隔符的文件夹名称(例如 'path/to/file')被解释为文字字符串,而不是系统路径。默认为驱动器根目录。
fileNamePrefix(字符串,可选) 文件名前缀。可能包含字母、数字、-、_(无空格)。默认为描述。
framesPerSecond(数字,可选) 导出视频的帧率。必须是介于 0.1 和 100 之间的值。默认为 1。
dimensions(数字|字符串,可选) 用于导出图像的尺寸。采用单个正整数作为最大维度或“WIDTHxHEIGHT”,其中 WIDTH 和 HEIGHT 均为正整数。
region(Geometry.LinearRing|Geometry.Polygon|String,可选) 表示要导出的区域的线性环、多边形或坐标。这些可以指定为几何对象或序列化为字符串的坐标。
scale(数字,可选) 以米/像素为单位的分辨率。
crs(字符串,可选) 用于导出图像的 CRS。默认为谷歌地图墨卡托投影,SR-ORG:6627。
crsTransform(字符串,可选) 用于导出图像的仿射变换。需要定义“crs”。
maxPixels(数字,可选) 限制导出中的像素数。默认情况下,如果导出超过 1e8 像素,您将看到错误。显式设置此值允许提高或降低此限制。
maxFrames(数量,可选) 设置要导出的最大帧数。默认情况下,最多可以导出 1000 帧。通过明确设置,您可以提高或降低此限制。

6. 图标展示 ui.Chart

在GEE中图标主要有三种类型,array数据的图表(ui.Chart.array)、feature数据图表(ui.Chart.feature)和image数据的图表(ui.Chart.image)。

6.1 ui.Chart.array.values

ui.Chart.array.values(array, axis, xLabels)

array:要展示的数据列表;

axis:要以哪个轴为方向展示列表,默认为0;

xLabels:要展示的数据对应的自变量数据列表;

6.2 ui.Chart.feature

ui.Chart.geature.byProperty(features, xProperties, seriesProperty)

features:要做统计的矢量数据;

xPropertes:要做统计的矢量数据属性;

seriesProperty:对应统计属性的标签列表,默认使用的是system:index;

6.3 ui.Chart.image

通过影像生成图表的方式有很多,常用的有生成一个影像集合每年内每一天的变化图表、生成直方图统计图表等。

Google Earth Engine-06(GEE操作方法)相关推荐

  1. Google Earth Engine(GEE)简单介绍及注册

    Google Earth Engine(GEE)是由谷歌.卡内基梅隆大学.美国地质调查局(USGS)共同开发的用以处理卫星遥感影像数据和其他地球观测数据的云端运算平台.GEE平台融合了谷歌服务器提供的 ...

  2. Google Earth Engine(GEE)农作物种植结构提取

    目录 写在前面 1.构建物候特征 2.构建光谱特征 3.将所有影像合并为一幅影像 4.构建随机森林算法进行分类 5.算法的存储 6.面积统计 写在前面 前段时间因为考研的原因一直没能更新,已经完成了农 ...

  3. 奥维互动地图加载地球引擎Google Earth Engine(GEE)1984-2022 地球卫星资源 亲测有效,路亚 钓鱼 露营 水下结构 水文 温湿度 地貌变化 大数据AI分析 神器

    Google Earth Engine是一个专门处理卫星图像和其他地球观测数据云端运算平台. 此平台能够存取卫星图像和其他地球观测数据数据库中的资料并提供足够的运算能力来处理这些数据. [1] 平台的 ...

  4. Google Earth Engine(GEE)对比显示不同城市的地表温度

    今天来简单分享下如何在GEE中对比显示不同城市的地表温度.之前分享过如何利用landsat数据去计算热度. 数据介绍: 数据源为MODIS/061/MOD11A2,数据集里面有个波段名字叫做LST_D ...

  5. Google Earth Engine(GEE)填补缺失影像

    今日分享: Google Earth Engine(GEE)填补缺失影像 之前在做月合成NDVI的过程中,发现如果研究区较大时,一个月的影像覆盖不了整个研究区,就会有缺失的地方,还有就是去云之后,有云 ...

  6. Google Earth Engine(GEE)——Error: Exported bands must have compatible data types; found inconsistent

    错误: Error: Exported bands must have compatible data types; found inconsistent types: Int16 and Byte. ...

  7. 猿创征文|Google Earth Engine(GEE)实现土地利用数据栅格转矢量

    今日分享: 利用GEE实现土地利用数据栅格转矢量 遇到的问题 之前在用ARCGIS栅格转矢量的时候,发现空间分辨率高的栅格图像,用"栅格转面"会运行失败,而且运行的时间非常的长: ...

  8. Google earth engine (GEE)如何规避数据无法运行无法导出问题

    使用Google earth engine(GEE)处理数据,经常会遇到数据无法导出,无法运行的情况,最近我也遇到了类似的情况,如下图.我最近遇到的这个问题,研究区是青藏高原,面积不算太大,但是在运行 ...

  9. Google Earth Engine(GEE)——sentinel-1综合查看两个月前后自动滑坡监测,两者之间的差异(危地马拉为例)

    上一次我们利用sentinel2进行了光谱分析,用的是指数计算NDVI,这一次为了更加进一步,我们结合sentinel1综合查看两者之间的差异.这里面需要注意的一点是我们可以通过自己选取点来查看,你要 ...

  10. Google Earth Engine(GEE)支持向量机分类

    今日分享: Google Earth Engine(GEE)支持向量机分类 上一篇文章简单实现了随机森林分类Google Earth Engine(GEE)随机森林分类,然后选的样本点有点问题,导致分 ...

最新文章

  1. TechNet 晒文 - Windows 7 系列汇总
  2. 卷积神经网络CNN总结(转)
  3. mysql清除内存不足_MySQL内存不足怎么办
  4. 如何开发自己的股票软件102
  5. 什么是python的内置函数_python 内置函数
  6. python tcp socket.connect() [Errno 56] Socket is already connectedconnect
  7. 菜肴百度百科html,酸汤鱼
  8. 关于Android的方向传感器
  9. java调用百望税控NISEC_SKSC.dll发送xml报文
  10. 基于Springboot的漫画之家管理系统
  11. 解决在uniapp项目中小程序调用获取微信绑定手机号
  12. Creo 工程图 尺寸 消失
  13. OpenAtom XuperChain开发者夏季论坛落幕,多位行业大咖共话开源区块链前景
  14. f开头的流媒体软件_流媒体直播工具(Streamon)
  15. SiT2020:抗冲击抗振动宽温振荡器,1-110MHz之间频率,SOT23-5封装
  16. 物联网企业争抢「两轮车换电」赛道
  17. 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?...
  18. 备份时,磁盘与磁带的抉择
  19. java SM9密钥转成String型
  20. html5电路模拟器,eda仿真软件

热门文章

  1. 教你如何不显示excel中 N/A
  2. 120道java最常问面试题!
  3. 外观(Facade)模式
  4. grammer Analyzer
  5. leetcode 巧妙解法 387. 字符串中的第一个唯一字符
  6. excel表格分割线一分为二_Python与Excel交互——Xlwings
  7. C盘User下的中文名字修改为英文遇到的问题
  8. 服务器i文件夹,IBM i上http server实用技巧之一:访问IBM i多文件系统
  9. java util zip.zipexc,JAVA解压zip压缩文件的实例
  10. 关于继电器开关带来的干扰