目录
3.3 矢量数据集合 ee.FeatureCollection()
在GEE中,JS API中所定义的数据类型主要包括数值、字符串、字典、日期、列表、数组、地图、几何图形、矢量数据、矢量数据集合、影像数据、影像数据集等类别。上述数据类型主要可分为基础数据类型、地图数据及空间数据类型三大部分,如下图所示:
一、基础数据类型
1.1 数值 ee.Number()
在GEE中,可以使用ee.Number()转换普通的数字,Number所具有的方法如下:
创建 | ee.Number() |
修改 | number.unit8();number.int8();number.toInt()..... |
比较 | number.eq();number.neq().... number.and();number.or();ee.Algorithms.IsEqua().... |
运算 | number.abs();number.round();number.pow()...... |
字位 | number.bitwiseAnd();number.bitwiseOr();number.bitwise_and(); number.bitwise_or();number.leftShift();number.right_shift();..... |
1.2 字符串 ee.String()
在GEE中,申明字符串子需要用ee.String()定义普通的字符串对象即可,并且ee.String()也提供了定义长度、拼接、大小写变换、获取索引等方法,常用的方法如下:
创建 | ee.String() |
修改 | string.cat();string.replace().... |
段落 | string.split();string.match().... |
查询 | string.slice();string.length().... |
1.3 字典 ee.Dictionary()
字典数据以键值对形式进行表示(js中的json,python中的字典){key:value},在GEE中,可以使用ee.Dictionary()进行创建,并提供修改、查询、对比等操作方法,常用的如下:
创建 | ee.Dictionary() |
修改 | dictionary.combine();dictionary.set() |
查询 | dictionarykeys();dictionary.get();dictionary.values() |
判断是否包含 | dictionary.contains() |
获取尺寸 | dictionary.size() |
删除 | dictionary.remove() |
生成新字典 | ee.Dictionary.fromLists(keys, values) |
1.4 日期 ee.Date()
在GEE中,可以使用 ee.Date()记录具体的时间,其中也提供获取时间信息、计算时间间隔和返回时间戳等方法,常用方法如下:
创建 | ee.Date();ee.Algorithms.Date();ee.Date.fromYMD();ee.Date.parse() |
编辑 | Date.advance();Date.update() |
调整 | Date.format();Date.milis();Date.getRange() |
提取 | Date.get();Date.getFraction();Date.unitRation();Date.difference(); Date.getRelative(); |
1.5 列表 ee.List()
列表是用于记录同类型数据的数据集。在GEE中,可以使用ee.List()定义列表数据类型,也提供了常用的的创建、转换、合并、删除、替换等操作的方法,如下:
创建 | ee.List();list.repeat();list.sequence() |
修改 | list.set(); list.replace();list.replaceAll();list.add();list.insert();list.zip() list.reverse();list.rotate();list.sort();list.swap();list.flatten() list.remove();list.removeAll() |
查询 | list.get();list.map();list.length();list.size();list.slice() |
比较 | list.equals();list.contains();list.containsAll();list.indexOf(); list.indexOfSubList();list.lastIndexOfSubList();list.frequency() |
合并 | list.cat() |
1.6 数组 ee.Array()
数组ee.Array是由一连串的数字或字符串构成,[]嵌套数目表示了数组的维度,表示一维向量、二维矩阵、三位立方体等类型。
创建 | ee.Array(); ee.Array.identity(); ee.Array.repeat() |
修改 | array.mask(); array.transpose();array.unit8();array.Unit8() |
逻辑操作 | array.eq(); array.and(); array.or(); array.round(); array.bitwistAnd(); array.leftShift() |
数学运算 | array.add();array.subtract();array.divide();array.multiply() |
二、地图数据
2.1 地图 Map
1)Map.add(item)
该方法通常是在地图展示区加入各种ui使用,如ui.Label等。
2)Map.centerObject(object,zoom)
设置地图居中位置,参数object是矢量数据或影像数据,zoom是缩放级别。
3)Map.addLayer(eeObject, visParams, name, shown, opacity)在地图上添加图层
eeObejct:图层内容,可以是矢量数据、影像等;
visParams:显示图层内容样式参数;
name:图层的名称;
shown:图层是否显示;
opacity:图层的透明度;
其中visParams参数样式可以设置的内容包括:bands(波段列表)、min(最小值)、max(最大值)、gamma(伽马系数)、palette(颜色列表)、opacity(透明度)等。
三、空间数据类型
3.1 几何图形 ee.Geometry()
3.1.1 Geometry基础类型方法
示例代码:
var line=ee.Geometry.LineString([[-103.28593749999999,38.46623315614578],[-94.98027343749999,40.534424706292405]])
var multiPolygon= ee.Geometry.MultiPolygon([[[[-84.29587208507718,39.96117602741789],[-84.20893110596711,38.095486162792234],[-81.32717506033146,40.59421005772966]]],[[[-83.68632812499999,34.7277971009936],[-81.97246093749999,37.8095219161184],[-85.00468749999999,37.63572230181635]]]]);
Map.addLayer(line,{color:"d63000"},"line");
Map.addLayer(multiPolygon,{color:"00ffff"},"multiPolygon");
实现效果:
在Geometry的创建中,最快捷的方式是通过用户点击创建所需的几何图形,如下图所示:
3.1.2 空间计算方法
在GEE中,不仅提供了Geometry的创建,还提供了针对各种Geometry的各种空间计算方法,如计算面积,提取中心点等,常用的操作如下所示:
area() | 计算Geometry的面积。 |
centroid() | 提取Geometry的中心点,返回值是对应的Geometry中心坐标。 |
bounds() | 提取Geometry对应的外接矩形。 |
buffer() | 对Geometry做缓冲区,传入的参数是正数,向外做缓冲区,传入的是负数相反。 |
intersects() | 判断两个Geometry是否相交,相交返回true,不相交返回false。 |
intersection() | 取得两个Geometry的相交部分,返回值为相交部分的新Geometry。 |
difference() | 取得两个Geometry不同的部分,返回在第一个Geometry但不在第二个Geometry内的部分。 |
corrdinates() | 获取Geometry的坐标信息。 |
3.2 矢量数据 ee.Feature()
在GEE中,Feature()类型的矢量数据是一种中间类型的数据,相比于Geometry多了一些需要存储的属性信息,类似于本地矢量数据的属性表。
3.2.1 Feature基本操作方法
ee. Feature(Geometry,var_args) | 创建Feature对象。 |
set(var_args) | 设置属性,其中var_args可以是字典或直接设置key和value,如set("count",1)或set({"count":1})。 |
get(property) | 通过属性名获取 Feature的对应属性值。 |
select(propertySelectors,newProperties,retainGeometry) | 用于直接筛选只包含特定属性的 Feature,或者可以对筛选的属性重新命名。 |
propertyNames() | 获取Feature对应的所有属性名称。 |
3.2.2 空间操作方法
因为Feature是包含了属性信息的Geometry,所以两者的空间操作方法也基本相同。
geometry() | 获取Feature对应的Geometry。 |
area() | 计算Feature的面积,返回值为平方米。 |
centroid() | 提取Feature的中心点,返回值是对应的Feature中心坐标。 |
bounds() | 提取Feature对应的外接矩形。 |
buffer() | 对Feature做缓冲区,传入的参数是正数,向外做缓冲区,传入的是负数相反。 |
intersects() | 判断两个Feature是否相交,相交返回true,不相交返回false。 |
intersection() | 取得两个Feature的相交部分,返回值为相交部分的新Feature。 |
difference() | 取得两个Feature不同的部分,返回在第一个Feature但不在第二个Feature内的部分。 |
geometry().corrdinates() | 获取Feature的坐标信息。 |
3.3 矢量数据集合 ee.FeatureCollection()
矢量数据集是GEE中常用的数据格式,在GEE中,矢量数据的操作大多数基于矢量数据集进行。
1)FeatureCollection创建和合并
ee.FeatureCollection(Feature1,Feature2...) | 创建FeatureCollection |
merge() | 合并两个FeatureCollection,例如:fCol1.merge(fCol2) |
2)FeatureCollection的过滤
filterMetadata() | 通过元信息进行过滤。 |
filterDate() | 通过时间进行过滤。 |
filterBounds() | 通过空间进行筛选过滤。 |
3) 查询
first() | 返回给定集合的第一个条目。 |
toList() | 将集合的元素作为列表返回。 |
aggregate_first() | 聚合集合中对象的给定属性,计算集合中第一个对象的属性值。 |
aggregate_array() | 聚合集合中对象的给定属性,计算所选属性的所有值的列表。 |
4)循环遍历矢量数据集
在GEE中,一般不用for循环进行操作,常用循环方法为map、iterate。
1.map循环
基础语法:
fCol=fCol.map(function(feature){
....
....
})
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)矢量集合数据统计分析aggregate_xxxx
.aggregate_stas/_histogram/_count/_count_distinct/ | |
.aggregate_max/_min/_sum/_mean/_product/ | |
.aggregate_sample_var/_total_var/_sample_sd/_total_sd/ |
6) 矢量数据转栅格
在GEE中,可以使用reduceToImage(properties, reducer)将矢量数据集转为栅格数据。
其中,参数properties是要转为栅格数据的属性,reducer是使用什么计算方式,如均值等。
3.4 影像数据 ee.Image()
Image的创建主要有GEE自带的数据集,用户上传和ee.image()/constant()及ee.Image.pixelLonLat()方法。
3.4.1 基本属性信息设置和获取
在GEE中,基本属性的获取和设置主要通过set()和get()方法获取,其他属性操作方法如获取波段名称列表bandName()、获取波段类型列表方法bandTypes()等,常用的如下:
get() | 获取影像属性信息 |
id() | 获取影像id列表 |
date() | 获取影像时间 |
bandNames() | 获取波段名称列表 |
bandTypes() | 获取波段类型列表 |
select() | 选择波段 |
clip() | 将图像剪辑到几何或特征。 输出波段与输入波段完全对应,但几何体未覆盖的数据被屏蔽。 输出图像保留输入图像的元数据。 使用 clipToCollection 将图像剪辑到 FeatureCollection。 返回剪切的图像。 |
mask() | 获取或设置图像的掩码。 输出图像保留输入图像的元数据和足迹。 掩码从零变为另一个值的像素将用零填充,或在像素类型范围内最接近零的值填充。 注意:设置掩码的版本将被弃用。 要在以前未遮罩的像素上设置图像的遮罩,请使用 Image.updateMask。 要取消屏蔽以前屏蔽的像素,请使用 Image.unmask。 |
3.4.2 影像之间数学运算
处理影像最本质的原理是对各波段进行各种运算,GEE中定义了常用的数学运算。
1)直接数学运算
add() | 加运算 |
subtract() | 减运算 |
multiply() | 乘运算 |
divide() | 除运算 |
sin()/cos().... | 三角函数 |
matrixXXX | 矩阵运算 |
arrayXXX | 数组运算 |
bitwiseXXX | 按位运算 |
2) normalizedDifference
该方法为(A-B)/(A+B)计算公式的缩略写法,常用于各类指数计算,例如计算NDVI:
var ndvi = image.noemalizedDifference(["B5","B4"])
3) expression表达式
表达式主要用于复杂的指数计算,如EVI等,该方法可以将计算的内容通过表达式格式直观的展示出来,用户只需替换表达式中具体的变量即可。下表为expression中使用的操作符号:
算数运算符 | + - * / % ** | 加、减、乘、除、模除、指数(幂) |
比较运算符 | == != < > <= >= | 相等、不等、小于、大于、小于等于、大于等于 |
逻辑运算符 | && || ! ^ | 并、或、非、异或 |
条件运算符 | ? : | if then else |
示例:
var EVI = image.expression(
'2.5 * ((NIR - RED)/(NIR + 6 * RED -7.5 *BLUE + 1))',
{
'NIR' : image.select('B5'),
'RED' : image.select('B4'),
'BLUE' : image.select('B2'),
}
).rename("EVI");
3.4.3 统计计算
1) reducer计算
这种方法主要用于多波段的影像统计分析,例如计算三个波段的均值,可以使用ee.Reducer.mean()获取。
ee.Reducer.allNonZero() | 如果其所有输入都非零,则返回 1,否则返回 0。 |
ee.Reducer.anyNonZero() | 如果它的任何输入非零,则返回 1,否则返回 0。 |
ee.Reducer.count() | 返回一个计算非空输入数量的 Reducer。 |
ee.Reducer.countDistinct() | 返回一个计算不同输入数量的 Reducer。 |
ee.Reducer.mean() | 返回计算其输入的(加权)算术平均值的 Reducer。 |
ee.Reducer.max(numInputs) | 创建一个输出其(第一个)输入的最大值的化简器。 如果 numInputs 大于 1,则还输出附加输入的相应值。 |
ee.Reducer.product() | 返回一个计算其输入乘积的 Reducer。 |
ee.Reducer.sum() | 返回计算其输入的(加权)总和的 Reducer。 |
..... | ...... |
2)reduceRegion
该方法用于统计某个区域的具体信息,基本语法如下:
reduceRegion(reducer, geometry, scale, crs, crsTransform, bestEffort, maxPixels, tileScale)
(1)reducer:计算方法,如计算均值mean等;
(2)geometry:统计区域的边界;
(3)scale:计算统计使用的分辨率;
(4)crs: 投影信息;
(5)crsTransform:投影信息参数;
(6)bestEffort:如果统计区域内像素过多,是否只取可以计算的最大像素数据;
(7)maxPixels:统计区域最多可以有多少像素;
(8)tileScale:系统内部优化参数,填写2的N次方,避免出现计算机内存不足问题;
其常用参数是reducer、geometry、scale、maxPixels、tileScale,其他在使用时一般使用默认值即可。
示例代码:
var mean = ndvi.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 30
})
其中roi为划定区域的geometry;
ndvi为从影像中计算得出的ndvi数据;
3)reduceRegions
该方法与上述reduceRegion基本相同,不同之处在于该方法可以对多个指定区域进行统计分析,并将结果数据写入新的矢量数据且返回这个矢量数据,基本语法如下:
reduceRegions(collection, reducer, scale, crs, crsTransform, tileScale)
(1)collection:统计分析使用的矢量集合数据;
(2)reducer:计算方法,如计算均值mean等;
(3)scale:计算统计使用的分辨率;
(4)crs: 投影信息;
(5)crsTransform:投影信息参数;
(8)tileScale:系统内部优化参数,填写2的N次方,避免出现计算机内存不足问题;
示例代码:
var mean = ndvi.reduceRegion({
reducer: ee.Reducer.mean(),
geometry: roi,
scale: 30
})
其中roi为划定多个矢量区域的geometry;
ndvi为从影像中计算得出的ndvi数据;
3.4..4 栅格数据转矢量
栅格数据转换为矢量数据在做数据分析或提取边界是非常有用,在GEE中转换方法是reduceToVectors,基本语法如下:
reduceToVectors(reducer, geometry, scale, geometryType, eightConnected, labelProperty, crs, crsTransform, bestEffort, maxPixels, tileScale, geometryInNativeProjection)
(1)reducer:计算方法;
(2)geometry:范围;
(3)scale:分辨率;
(4)geometryType:生成的适量类型,默认是polygon类型;
(5)eightConnected:是否是八连通,默认是true;
(6)labelProperty:属性表的标签,默认label;
(7)crs:投影信息;
(8)crsTransform:投影信息参数;
(9)bestEffort:如果像素过多,是否只提取有限像素实现计算要求;
(10)maxPixels:最大像素数量,默认le8,通常设置lel3;
(11)tileScale:优化内部计算使用,可以减少计算内存溢出问题;
(12)geometryInNativeProjection:在像素的投影信息下创建矢量数据,默认为false,这个选项几乎都是false;
3.5 影像集合 ee.ImageCollection()
影像集合与矢量集合数据处理方法类似,常用的有过滤方法、循环遍历方法等。
3.5.1 获取基本属性
ee.ImageCollection() | 创建影像数据集 |
ee.ImageCollection.load() | 加载影像数据集 |
set() | 设置影像数据集属性 |
get() | 获取影像数据集属性 |
size() | 获取影像集合的大小 |
limit() | 固定筛选指定个数影像 |
3.5.2 过滤筛选
filterBounds | 空间过滤 |
filterDate | 时间过滤 |
filterMetadata | 元信息过滤 |
filter | 过滤器 |
3.5.3 循环遍历
在ImageCollection中,循环遍历的方法为map或iterate,用法与矢量数据集的循环遍历用法相似,可参考本篇上述内容。
3.5.4 统计计算
1)reduce
影像中reduce用于计算多波段数据,此处reduce方法则是要将影像集合中的所有影像按照对应波段计算,然后生成单景影像。在GEE中,所有的操作底层都是在操作像素,所以计算结果是对应的所有像素的计算结果。
reduce(reducer, parallelScale)
(1)reducer:使用计算方法,如均值、最大值、最小值等;
(2)parallelScale:缩放比例,是一个后台的优化参数,如果计算内存溢出可以设置大一些的参数,如2、4等。
2)reduceColumns
该方法用来统计属性的基本信息,常见的操作如统计集合的所有索引信息,并且返回这个列表。
reduceColumns(reducer, selectors, weightSelectors)
(1)reducer:使用计算方法,如均值、最大值、最小值等;
(2)selectors:属性列表;
(3)weightSelectors:属性列表对应的权重信息,通常是默认值;