目录
一、基础数据类型
1.1 数值 ee.Number()
1.2 字符串 ee.String()
1.3 字典 ee.Dictionary()
1.4 日期 ee.Date()
1.5 列表 ee.List()
1.6 数组 ee.Array()
二、地图数据
2.1 地图 Map
三、空间数据类型
3.1 几何图形 ee.Geometry()
3.1.1 Geometry基础类型方法
编辑 3.1.2 空间计算方法
3.2 矢量数据 ee.Feature()
3.2.1 Feature基本操作方法
3.2.2 空间操作方法
3.3 矢量数据集合 ee.FeatureCollection()
3.4 影像数据 ee.Image()
3.4.1 基本属性信息设置和获取
3.4.2 影像之间数学运算
3.4.3 统计计算
3.4..4 栅格数据转矢量
3.5 影像集合 ee.ImageCollection()
3.5.1 获取基本属性
3.5.2 过滤筛选
3.5.3 循环遍历
3.5.4 统计计算
在GEE中,JS API中所定义的数据类型主要包括数值、字符串、字典、日期、列表、数组、地图、几何图形、矢量数据、矢量数据集合、影像数据、影像数据集等类别。上述数据类型主要可分为基础数据类型、地图数据及空间数据类型三大部分,如下图所示:
在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();..... |
在GEE中,申明字符串子需要用ee.String()定义普通的字符串对象即可,并且ee.String()也提供了定义长度、拼接、大小写变换、获取索引等方法,常用的方法如下:
创建 | ee.String() |
修改 | string.cat();string.replace().... |
段落 | string.split();string.match().... |
查询 | string.slice();string.length().... |
字典数据以键值对形式进行表示(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) |
在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(); |
列表是用于记录同类型数据的数据集。在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() |
数组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() |
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(透明度)等。
示例代码:
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的创建中,最快捷的方式是通过用户点击创建所需的几何图形,如下图所示:
在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的坐标信息。 |
在GEE中,Feature()类型的矢量数据是一种中间类型的数据,相比于Geometry多了一些需要存储的属性信息,类似于本地矢量数据的属性表。
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对应的所有属性名称。 |
因为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的坐标信息。 |
矢量数据集是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是使用什么计算方式,如均值等。
Image的创建主要有GEE自带的数据集,用户上传和ee.image()/constant()及ee.Image.pixelLonLat()方法。
在GEE中,基本属性的获取和设置主要通过set()和get()方法获取,其他属性操作方法如获取波段名称列表bandName()、获取波段类型列表方法bandTypes()等,常用的如下:
get() | 获取影像属性信息 |
id() | 获取影像id列表 |
date() | 获取影像时间 |
bandNames() | 获取波段名称列表 |
bandTypes() | 获取波段类型列表 |
select() | 选择波段 |
clip() | 将图像剪辑到几何或特征。 输出波段与输入波段完全对应,但几何体未覆盖的数据被屏蔽。 输出图像保留输入图像的元数据。 使用 clipToCollection 将图像剪辑到 FeatureCollection。 返回剪切的图像。 |
mask() | 获取或设置图像的掩码。 输出图像保留输入图像的元数据和足迹。 掩码从零变为另一个值的像素将用零填充,或在像素类型范围内最接近零的值填充。 注意:设置掩码的版本将被弃用。 要在以前未遮罩的像素上设置图像的遮罩,请使用 Image.updateMask。 要取消屏蔽以前屏蔽的像素,请使用 Image.unmask。 |
处理影像最本质的原理是对各波段进行各种运算,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");
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数据;
栅格数据转换为矢量数据在做数据分析或提取边界是非常有用,在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;
影像集合与矢量集合数据处理方法类似,常用的有过滤方法、循环遍历方法等。
ee.ImageCollection() | 创建影像数据集 |
ee.ImageCollection.load() | 加载影像数据集 |
set() | 设置影像数据集属性 |
get() | 获取影像数据集属性 |
size() | 获取影像集合的大小 |
limit() | 固定筛选指定个数影像 |
filterBounds | 空间过滤 |
filterDate | 时间过滤 |
filterMetadata | 元信息过滤 |
filter | 过滤器 |
在ImageCollection中,循环遍历的方法为map或iterate,用法与矢量数据集的循环遍历用法相似,可参考本篇上述内容。
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:属性列表对应的权重信息,通常是默认值;