本文主要对GEE中依据矢量数据裁剪栅格数据的操作加以介绍。本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第三篇,更多GEE文章请参考专栏:GEE学习与应用(https://blog.csdn.net/zhebushibiaoshifu/category_11081040.html)。
首先,依据第二篇GEE教学博客(https://blog.csdn.net/zhebushibiaoshifu/article/details/117296956)中内容,我们将Landsat 8 Collection 1 Tier 1的大气表观反射率TOA Reflectance产品导入GEE。
随后,依据同样方法搜索United States Counties
,并选择2018年数据。该数据是美国普查局(United States Census Bureau)发布的2018年主要合法边界划分数据,简单来说就是划分美国各州郡县级地理实体的矢量边界数据。
点击数据名称即可查看其信息,例如可以看到其“Name”字段为郡县级地理实体的名称。
点击“IMPORT”将这一数据导入GEE。
依据前述第二篇教学博客中方法,对这一矢量数据加以重命名。
点击var County
旁的箭头,我们即可查看其各类属性信息。
操作过程中如果需要再次查看数据介绍,我们直接点击其名称即可。
输入代码,将这一矢量数据在地图中显示出来。
Map.addLayer(County);
即可看到美国郡县级地理实体的边界信息。接下来,我们将依据FIPS(Federal Information Processing System)编码对某一个单独州内的全部郡县加以提取。本文我们就以美国中西部的堪萨斯州为例进行操作。
FIPS编码是美国国内各地区各自的唯一编码,用以区分不同地理实体。每个州各自均有一个唯一的二位FIPS编码,每个州下的所有郡县级地区同样有各自唯一的五位FIPS编码(其中前两位是一样的,都是该州所属FIPS编码)。显然,如果需要提取某一个州的全部郡县,我们需要依据矢量边界地图中FIPS编码相关的属性加以操作。
点击图层名称,查看图层属性;可以看到,我们所导入的矢量边界地图中“GEOID”字段是我们需要的FIPS编码属性字段。
注释掉前面Map.addLayer(County);
这一句代码,写下如下所示的新代码:
var kansas=County.filterMetadata('GEOID','starts_with','20');
Map.addLayer(kansas,{},'Kansas');
print(kansas)
其中,.filterMetadata()
函数是对数据的属性字段加以筛选,其第一个参数'GEOID'
表示需要参与筛选的字段名称;第二个参数'starts_with'
表示地理要素筛选方式,此外包括'equals'
、'less_than'
、'not_ends_with'
等等关系表达式,本文中'starts_with'
表示选择“以此开头”的地理要素;第三个'20'
表示具体的数值。总的来说,上述这句筛选代码含义就是:在County
所表示的全部郡县中,筛选'GEOID'
字段中以'20'
开头('starts_with'
)的所有郡县。
此外,后两句代码在第二篇GEE教学博客中有所介绍,这里不再赘述。
下图即为执行上述代码后所得结果,可以看到在地图中显示的仅为属于堪萨斯州的郡县。在这里为了更好显示每一句代码的含义,分别用不同颜色绘制了笔迹和框图,每一处笔迹对应的代码所得结果就是该颜色所对应的框中所展示内容。
此外,如果我们不清楚矢量图层中每一个字段具体的形式,可以选择“Inspector”后,用鼠标随意选中某一个矢量区域,并在右上角查看其具体信息。
接下来,我们基于上述堪萨斯州郡县对Landsat 8栅格数据加以裁剪。首先将Landsat 8数据重命名。
随后,依据第二篇GEE教学博客中所示内容对其加以时间处理与平均求取。
var landsat_8_mon_kansas=Landsat_8.filterDate('2020-4-1','2020-4-30').mean().clip(kansas);
Map.addLayer(landsat_8_mon_kansas);
可以看到,具体的裁剪操作其实非常简单,只需要在得到的求取平均后的栅格数据后添加.clip()
函数即可,其中括号内即为所需进行裁剪的边界。
我们基于第二篇GEE教学博客中所述方法,对得到的数据进行一些可视化处理,可以使得裁剪结果更为清晰,如下所示。