Google Earth Engine (GEE) 是由谷歌公司开发的众多应用之一。借助谷歌公司超强的服务器运算能力以及与 NASA 的合作关系,GEE 平台将LandsatMODISSentinel 等可以公开获取的遥感图像数据存储在谷歌的磁盘阵列中,使得 GEE 用户可以方便的提取、调用和分析海量的遥感大数据资源。

GEE它是一个集科学分析以及地理信息数据可视化的综合性平台。简单的说,GEE是一个“遥感大数据”分析和呈现的平台。作为地理云计算服务平台GEE 将地理数据分析算法封装成函数接口的形式提供给用户,通过互联网可以使用户快速地访问海量的影像数据以及其他空间数据,而不需要下载到本地,在云端实现当前地理空间数据分析的全部流程。通过云计算还可以使共享的计算机软硬件资源和地理大数据,按需求提供给用户使用,使任何用户都可以使用服务商提供的多平台软硬件资源和地理大数据,开展常规个人计算机无法实现的地理计算和数据分析。

GEE 在设计之初就是为了服务科研人员而构建的,因此在概念上可以将 GEE 视为一种工具,类似于菜刀之于厨师或者猎枪之于猎手,而不应该将其当作一种复杂的计算机编程平台。

GEE包含图形用户界面和应用程序编程接口。GEE 是一个主要依靠编码命令进行空间分析和操作的平台,但 GEE 也有适合界面操作的平台:GEE 的图形用户界面(Graphical User Interface, GUI)。GEEGUI 的优点在于符合人的操作直觉,并且对新用户友好,缺点是功能较少,可以实现的空间分析有限。GEE 的应用程序编程接口(Application Programming Interface, API)是 GEE 的核心功能所在,也是 GEE 用户最为关注的平台,与 GUI 相比,API 可以调用 GEE 平台中的所有数据和功能。可以说,学习 GEE 就是学习 GEEAPI

GEE 中存储着海量的遥感数据,熟悉这些数据能够让用户更加便捷的实现空间和地理分析目标。总体上,GEE 的数据可以分为 4 个种类:栅格数据,栅格集数据,矢量数据,矢量集数据。

⛄栅格数据

GEE 中的栅格数据主要包括来源自遥感卫星的数据和空间插值数据产品。

数据集 空间分辨率 时间分辨率 时间覆盖 空间覆盖
Landsat
Landsat 8 OLI/TIRS 30m 16day 2013-Now Global
Landsat 7 ETM+ 30m 16day 2000-Now Global
Landsat 5 TM 30m 16day 1984-2012 Global
Landsat 4–8 surface reflectance 30m 16day 1984-Now Global
Sentinel
Sentinel 1 A/B ground range detected 10m 6day 2014-Now Global
Sentinel 2A MSI 20m 10day 2015-Now Global
MODIS
MOD08 atmosphere daily 2000-Now Global
MOD09 surface reflectance 500m 1/8day 2000-Now Global
MOD10 snow cover 500m 1day 2000-Now Global
MOD11 temperature and emissivity 1000m 1/8day 2000-Now Global
MCD12 Land cover 500m Annual 2000-Now Global
MOD13 Vegetation indices 500/250m 16day 2000-Now Global
MOD14 Thermal anomalies & fire 1000m 8day 2000-Now Global
MCD15 Leaf area index/FPAR 500m 4day 2000-Now Global
MOD17 Gross primary productivity 500m 8day 2000-Now Global
MCD43 BRDF-adjusted reflectance 1000/500m 8/16day 2000-Now Global
MOD44 veg. cover conversion 250m Annual 2000-Now Global
MCD45 thermal anomalies and fire 500m 30day 2000-Now Global
ASTER
L1 T radiance 15/30/90m 1day 2000-Now Global
Global emissivity 100m Once 2000-2010 Global
Other imagery
PROBA-V top of canopy reflectance 100/300m 2day 2013-Now Global
EO-1 hyperion hyperspectral radiance 30m Targeted 2001-Now Global
DMSP-OLS nighttime lights 1km Annual 1992-2013 Global
USDA NAIP aerial imagery 1m Sub-annual 2003-2015 CONUS
地形
Shuttle Radar Topography Mission 30m single 2000 60°N–54°S
USGS GMTED2010 10m single Multiple US
USGS National Elevation Dataset 7.5″ single Multiple 83°N–57°S
GTOPO30 30″ single Multiple Global
ETOPO1 1′ single Multiple Global

注:来源 Google Earth Engine: Planetary-scale geospatial analysis for everyone [J]. Remote Sensing of Environment

GEE 中其他的主要栅格产品包括土地利用数据,气象数据和人口数据等。这些数据与遥感影像数据相比,主要用来反映某些社会因子的空间分布,或者反映地表以上空间的自然特征。

数据集 空间分辨率 时间分辨率 时间覆盖 空间覆盖
土地利用
GlobCover 300m Non-periodic 2009 90°N–65°S
USGS National Landcover Database 30m Non-periodic 1992-2011 CONUS
UMD global forest change 30m Annual 2000-2014 80°N–57°S
JRC global surface water 300m Monthly 1984-2015 78°N–60°S
GLCF tree cover 30m 5year 2000-2010 Global
USDA NASS cropland data layer 30m Annual 1997-2015 CONUS
气象
Global precipitation measurement 6′ 3h 2014-Now Global
TRMM 3B42 precipitation 15′ 3h 1985-2015 50°N–50°S
CHIRPS precipitation 3′ 5day 1981-Now 50°N–50°S
NLDAS-2 7.5′ 1h 1979-Now North America
GLDAS-2 15′ 3h 1948-2010 Global
NCEP reanalysis 2.5° 6h 1948-Now Global
ORNL DAYMET weather 1km 12 Images 1980-Now North America
GRIDMET 4km 1day 1979-Now CONUS
NCEP global forecast system 15′ 6h 2015-Now Global
NCEP climate forecast system 12′ 6h 1979-Now Global
WorldClim 30″ 12 Images 1960-1990 Global
NEX downscaled climate projections 1km 1day 1950-2099 North America
人口
WorldPop 100m 5year Multiple 2010–2015
GPWv4 30″ 5year 2000-2020 85°N–60°S

注:来源 Google Earth Engine: Planetary-scale geospatial analysis for everyone [J]. Remote Sensing of Environment

⛄矢量数据

简单来说,矢量数据可以理解为点、线和面类型的数据。在处理空间问题时,常常需要确定某个地理要素的位置(例如某区域商店的位置),或者某些线状地物的位置(河流、道路等),以及某些面状物的分布(行政边界等)。在确定矢量空间要素空间特征的基础上,再给这些空间要素贴上标签(名称,面积,权属等),那么就得到了包含一定信息的矢量数据。我们通常将这种矢量数据成为“特征矢量”(Feature),将其空间形状称为“地理特征”(Geometry),将贴上去的标签信息称为“属性”(Property)。我们分别从ArcGISGEE 中添加并查看Feature的信息,以此加深对矢量数据的理解。

⛄数据类型和参数类型

👀GEE 的数据类型 (String, Number)

显示:print(string)
创建:ee.String()
修改:string.cat() string.replace()
段落:string.split() string.match
查询:string.slice() string.length()
创建:ee.Number()
修改:number.uint8() number.Uint8() number.int8() number.toInt8()……
比较: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 的数据类型(DictionaryListArray)

创建:ee.Dicionary()
修改:dictionary.combine() dinctionary.set()
查询:dictionary.keys() dictionary.get() dictionary.values()
对比:dictionary.contains()
尺寸:dictionary.size()
创建:ee.List() list.repeat() list.sequence()
修改:list.set() list.replaceAll() list.add() list.insert() list.zip()
list.reverse() list.rotate() list.sort() list.swap() list.flatten()
查询:list.get() list.remove() list.removeAll()
比较:list.equals() list.contains() list.containsALL() list. indexOf()
list.indexOfSubList() list.lastIndexOfSubList() list.frequency()
其他:list.map() list.iterate() list.length() list.size()
创建:ee.Array() ee.Array.identity() ee.Array.repeat()	
修改:array.mask() array.transpose() array.uint8() array.Uint8()
数学:array.eq() array.and() array.or() array.round()
array.bitwiseAnd() array.leftShift()

👀GEE 的数据类型(GeometryFeatureFeatureCollection)

创建:ee.Geometry.Point() ee.Geometry.Multipoint() 绘图工具 ……
几何:Geometry.transform() geometry.centroid() geometry.simplify()
geometry.bounds() geometry.buffer() geometry.union() ……
查询:geometry.geometries() geometry.coordinates() geometry.length()
geometry.area() geometry.perimeter() geometry.distance()
转换:geometry.toGeoJSON()
创建:ee.Feature()	绘图工具
编辑:Feature.select() Feature.transform() Feature.set/setMulti()
几何:Feature.centroid/simplify/bounds/convexHull/buffer()
Feature.union/intersection/difference/symmetricDifference()
提取:Feature.geometry() Feature.get() Feature.Length/Area/Perimeter()
创建:GEE自带 上传 FushionTable ee.FeatureCollection() .randomPoints() 手绘…
编辑:.filterMetadata() .limit() .filterDate() .filterBounds() .filter()
.select() .distinct() .union() .merge() .set() .remap() .sort()
.makeArray()
转换:.geometry() .reduceToImage()
查询:.first() .toList() .aggregate_first() .aggregate_array()
统计:.aggregate_stats/_histogram/_count/_count_distinct
.aggregate_max/_min/_sum/_mean/_product
.aggregate_sample_var/_total_var/_sample_sd/_total_sd/
其他: .map()

👀GEE 的数据类型 (ImageImageCollection)

创建: GEE自带 用户上传 ee.image()/constant() ee.Image.pixelLonLat() 
编辑: .mask() .clip() .select() .slice() .addBands() .reproject() .rbgtohsv()
.hsvtorbg() .unit8() .cast() .set() .setMulti() .remap() .where()
.metadata() .clamp() .unitScale() .interpolate() .eq()…… .abs()…… .sin() ……
.bitWiseAnd()…… .reduce()
地形: image.derivative() ee.Terrain.products() ee.Algorithm.Terrain()
ee.Terrain.slope() ee.Terrain.aspect() ee.Terrain.fillMinima()
ee.Terrain.hillshade() ee.Terrain.hillshadow() ee.Algorithm.Hillshadow()
纹理: .entropy() .Texture() .zeroCrossing() .ee.Algorithms.CannyEdgeDetector()
ee.Algorithms.HoughTransform()
邻域: .focal_max() .focal_min() .focal_median() .focal_mode() .convolve()
.reduceNeighborhood()
转换: .Image.ToVector() Image.ToArray() Image.arrayFlatten()
其他: .CrossCorrelation() .distance() Export.image()
创建: ee.ImageCollection() ee.ImageCollection.load()
筛选: .limit() .filterMetadata() .filterDate() .filterBounds() .filter() .select()
.distinct() .comnibe() .unit8()…… .set() .setMulti()
求值: .mosaic() .and/or() .sum/product/max/min/mean/mode/median/count()
转换: .first() .toList() .toArray()

👀GEE 的数据类型 (Landsat Images, ConfusionMarix)

LansatCollection.qualityMosaic()
LansatCollection.unmixing()
LansatCollection.normalizedDifference()
ee.Algorithms.Landsat.simpleCloudScore()
ee.Algorithms.Landsat.simpleComposite()
创建: ee.ConfusionMatrix() 
转换: ConfusionMatrix.array()
精度: .kappa() .accuracy() .producersAccuracy() .consumersAccuracy() .order()

👀GEE 的参数类型 (Date, DateRange)

创建:ee.Date() ee.Algorithms.Date() ee.Date.fromYMD() ee.Date.parse()
编辑:Date.advance() Date.update()
调整:Date.format() Date.milis() Date.getRange()
提取:Date.get() Date.gerFraction() Date.unitRation() Date.difference()
创建: ee.DateRange() ee.DateRange.unbounded()
联并: DateRange.Union() DateRange.intersection()
查询: DateRange.start() DateRange.end()
判断: .intersencts() .contains() .inEmpty() .isUnbounded()

👀GEE 的参数类型 (FilterJoin)

创建:ee.Filter.eq() ee.Filter.neq() ee.Filter.ge() ee.Filter.gte() ee.Filter.le()		 
ee.Filter.lte() ee.Filter.maxDifference()
字段:ee.Filter.stringContains() ee.Filter.StarsWith() ee.Filter.EndWith()
ee.Filter.Rangecontains() ee.Filter.listContains() ee.Filter.inList()
时间:ee.Filter.calendarRange() ee.FilterDateRangeContains()
ee.Filter.dayOfYear()
转换:ee.Filter.and() ee.Filter.or() ee.Filter.not() ee.Filter()
ee.Join.simple() ee.Join.inverted() ee.Join.inner()	
ee.Join.saveAll() ee.Join.saveBest() ee.Join.saveFirst()
Spatial Joins (ee.Filter.withinDistance/ee.Filter.intersects)

👀GEE 的参数类型 (ReducerKernelAlgorithm)

创建: ee.Reducer.count() .countEvery() .first() .histogram() .allNonZero()			 
.anyNonZero() .frequencyHistrogram() .toList() .toCollection()
数学: sum() .product() .mean() .variance() .std_dev() .sampleVariance()
.sampleStdDev() .max() .min() .minMax() .median() .mode()
.intervalMean() .percentile() .linearFit()
转换: .setOutputs() .getOutputs() .combine() .repeat() .repeat()
.group() .unweighted() .splitWeights()
创建: ee.Kernel.roberts() ee.Kernel.prewitt() ee.Kernel.sobel() 		   
ee.Kernel.compass() ee.Kernel.kirsch() ee.Kernel.laplacian4()
ee.Kernel.laplacian8() ee.Kernel.euclidean() ee.Kernel.gaussian()
ee.Kernel.manhattan() ee.Kernel.chebyshev() ee.Kernel.circle()
ee.Kernel.octagon() ee.Kernel.square() ee.Kernel.diamond() ee.Kernel.cross()
ee.Kernel.plus() ee.Kernel.fixed()
编辑: Kernel.rotate() kernel.add() print(Kernel)
Algorithm,算法的目的是减少重复运算,我们可将其理解为一个“小程序”,借助这个小程序可以对数据集内的每一个数据都进行同样的操作。下边是算法的语法格式:
function 函数名(变量)
{ 操作 }
算法的核心在于操作的编写。编写操作时要注意两点,第一,应该按照目标数据集确定变量名,比如针对栅格数据集的操作变量可以写作 Image 或者 img,这样能够提高操作的可读性。第二,操作必须包含 return 命令以告诉 GEE 算法的目的是什么。

⛄GEE平台优势与应用

随着云计算技术的不断发展,GEE 从2008 年提出构想不断发展至今天,已经成为提供覆盖全球的地理空间数据的集成、处理、可视化和综合分析一站式解决方案的云端共享平台,总结GEE的平台具有如下优势:

  • 免费向非商业用户提供使用GEE面向全球科研人员、学生、教育工作者等提供非商业性质用户提供免费服务。
  • 算法高集成度以及可定制性。在算法集成方面,提供了持续更新的智能算法以及可供研究者定制的功能接口,这将激励研究者不断尝试新的算法来实现科学构想,而不只是停留在理论层面,这将进一步促进平台的智能化发展,很多以往难以解决的问题都将开启新的思路。
  • 后台处理运算能力强。使用GEE平台,用户可以比较方便地处理全球影像数据,解决了用户受限自己本地机器运算能力不强,以及存储空间不足的问题,能够高校、快速地处理大范围的影像。
  • 完整的生态开发环境。目前GEE 已经拥有一个完整而良好的开发生态环境,开发者和平台核心团队人员可以通过论坛,会议等多种形式进行深入甲流,探讨各种问题,除了现有的工具资源,用户还可以利用GEE提供的开发包做二次开发,满足更多的需求,实现更加强大的功能。

GEE被广泛应用于各个领域,涵盖全球森林变化,全球地表水变化、作物产量估算、稻田制图、城市测绘、洪水测绘、火灾恢复和疟疾风险绘图等等不同主题。它还被整合到许多第三方应用中,例如分析物种栖息地范围(Map of Life)、监测气候(Climate Engine)和评估土地利用变化(Collect Earth)等等。

参考资料

  1. 遥感云计算平台:Google Earth Engine
  2. 遥感大数据工具(Google Earth Engine)基础教程,作者:王金柱