正务库

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取

时间:3个月前   游览量:46    标签: 投影    获取    转换    参数    参考    引擎    Google   

 本文主要对GEE中的投影信息参考坐标系及其空间转换参数获取加以介绍。

  本文是谷歌地球引擎(google Earth Engine,GEE)系列教学文章的第十二篇,更多GEE文章请参考专栏:GEE学习与应用(GEE学习与应用_疯狂学习GIS的博客-CSDN博客)。

  在前十一篇GEE教学博客中,我们详细介绍了GEE中的各类代码规则与具体操作,但都没有涉及地理学中的一个重要部分——投影;这是因为,我们在GEE中进行各项地理操作时,其将自动依据输入与输出数据的属性自动调整投影信息,不需要用户自行调整,因此相当于免除了地理坐标系、投影坐标系等之间的转换,非常方便。但是在某些场合,例如我们需要自行指定GEE中某个图层的投影坐标系时,或是我们所导入的一景影像中不同波段之间的投影信息不同时等等,还是需要我们自行进行投影相关的操作。本文就介绍GEE中获取图层投影信息、参考坐标系与投影坐标转换参数的方法;而关于GEE中重投影的介绍与操作,将会在下一篇博客中进行详细讲解。

  首先,依据第九篇GEE教学博客(Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句_疯狂学习GIS的博客-CSDN博客)中提及的遥感影像导入方法,导入2020年08月03日成像的,且Path号为123,Row号为032(覆盖北京市)的Landsat 8 Collection 1 Tier 1的大气表观反射率TOA Reflectance产品;并将地图按照这一景遥感影像的中心经、纬度进行缩放,同时将遥感影像在地图中显示。

var landsat_5=ee.Image("LANDSAT/LC08/C01/T1_TOA/LC08_123032_20200803");
Map.centerObject(landsat_5,8);
Map.addLayer(landsat_5);

  其中,Map.centerObject()函数表示按照某一个地理要素的中心经、纬度进行缩放,其两个参数分别为作为参照的地理要素(在本文中即为刚刚导入的这一景遥感影像)与缩放系数。关于GEE中缩放系数的具体讲解请查看第九篇GEE教学博客(Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句_疯狂学习GIS的博客-CSDN博客)。

  接下来,我们以刚刚导入的这一景Landsat 8遥感影像为例,获取并打印其投影信息。

print("Projection and transformation information of this image:",landsat_5.projection());

  其中,.projection()函数用以获取图像的投影信息。

  但是,执行上述代码会出现如下的错误:

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第1张

 

  可以看到,由于Landsat 8 Collection 1 Tier 1的大气表观反射率TOA Reflectance产品影像中各波段之间的投影信息不一致,导致无法使用.projection()函数获取这一景图像的投影信息。针对这一情况,我们首先打印一下这一景影像,看看其波段信息。

print(landsat_5);

  执行代码,得到这一景遥感影像的波段信息。

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第2张

 

  通过打印得到的结果,可以看到这一景影像12个波段的投影坐标系都是一致的,均为EPSG:32650,即WGS 84下的UTM zone 50N坐标系。这样看来各波段间投影坐标系似乎都是一致的,为什么还会出现上述报错呢?

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第3张

 

  查阅GEE官方文档可知,其实不仅仅是各波段间的投影坐标系需一致,还需各波段对应图层的空间分辨率亦保持一致,这样才属于投影信息一致,才可以使用.projection()函数获取这一景图像的投影信息。我们再来看一下print()函数打印出的遥感影像信息,可以发现其第七个波段(即B8)的空间分辨率确实和其他波段不一致。

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第4张

 

  将波段信息展开,可以更为清晰地看到第七个波段(即B8)与其它波段之间的区别——第七个波段尽管与其它波段的crs一致,但是其crs_transform与其它波段是不一样的。其中,crs(即Coordinate Reference SystemCRS)表示该波段投影信息的基准参考坐标系,crs_transform则表示该波段投影坐标系和基准参考坐标系之间的转换参数。这样来看,基准坐标系crs是一致的,但由于空间分辨率不一致使得其转换参数crs_transform不一致,势必导致第七个波段(即B8)与其它波段的投影信息是不一样的,从而出现上述报错。

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第5张

 

  因此,我们需要对波段进行筛选。首先,依据第二篇GEE教学博客(Google Earth Engine谷歌地球引擎GEE中JavaScript脚本语言代码基础规则与函数语句_疯狂学习GIS的博客-CSDN博客)中提及的GEE数据搜索方法,我们搜索并查看Landsat 8 Collection 1 Tier 1的大气表观反射率TOA Reflectance产品的波段信息。

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第6张

 

  可以看到,其中B2、B3与B4波段分别为蓝、绿、红三种颜色对应的波段;我们就以这三个波段为例继续进行后续操作。基于第六篇GEE教学博客(Google Earth Engine谷歌地球引擎GEE栅格代数与NDVI波段计算手动求取_疯狂学习GIS的博客-CSDN博客_gee波段计算)中介绍的.select()函数,将上述三个波段取出,并重新使用.projection()函数获取其投影信息。

var band=landsat_5.select("B[2-4]");
print("Projection and transformation information of this image:",band.projection());

  执行代码,可以看到投影信息已经成功得到。

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第7张

 

  通过右侧打印成功的投影信息我们还可以注意到,使用.projection()函数获取的投影信息包括crs与transform两个部分——这也再一次证明了波段之间除了投影坐标系的基准参考坐标系需要一致,还需要转换参数一致,才可以使用.projection()函数。

  随后,我们还可以将当前图层投影信息的线性比例(单位为m)加以获取。这里获取的比例即Nominal Pixel Size,在GEE官方手册中将其称为“当前图层的金字塔中,最底层的名义像素大小”;而一个图层的最底层金字塔其实就是该图层自身,因此这里求得的其实就是遥感影像自身的空间分辨率。

print("Pixel size in meters:",band.projection().nominalScale());

Google Earth Engine谷歌地球引擎投影、参考坐标系及转换参数获取 网络技术 第8张

 

  可以看到,获得的结果为30m,亦即Landsat 8可见光波段的空间分辨率。