谷歌地球引擎GEE:查看地图投影与坐标系并获取空间转换参数

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

本文是谷歌地球引擎(Google Earth Engine,GEE)系列教学文章的第十二篇,更多GEE 文章请参考专栏:GEE学习与应用

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

首先,依据# 谷歌地球引擎GEE的JavaScript代码基础知识与用法中提及的遥感影像导入方法,导入2020年08月03日成像的,且Path号为123Row号为032(覆盖北京市)的Landsat 8 Collection 1 Tier 1 的大气表观反射率TOA Reflectance产品;并将地图按照这一景遥感影像的中心经、纬度进行缩放,同时将遥感影像在地图中显示。

js 复制代码
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的JavaScript代码基础知识与用法

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

js 复制代码
print("Projection and transformation information of this image:",landsat_5.projection());

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

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

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

js 复制代码
print(landsat_5);

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

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

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

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

因此,我们需要对波段进行筛选。首先,依据# 谷歌地球引擎GEE:栅格数据的导入、筛选与可视化中提及的GEE 数据搜索方法,我们搜索并查看Landsat 8 Collection 1 Tier 1 的大气表观反射率TOA Reflectance产品的波段信息。

可以看到,其中B2B3B4波段分别为蓝、绿、红三种颜色对应的波段;我们就以这三个波段为例继续进行后续操作。基于# 谷歌地球引擎GEE:波段代数与波段计算中介绍的.select()函数,将上述三个波段取出,并重新使用.projection()函数获取其投影信息。

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

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

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

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

js 复制代码
print("Pixel size in meters:",band.projection().nominalScale());

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

至此,大功告成。

相关推荐
秋邱1 分钟前
AR + 离线 AI 实战:YOLOv9+TensorFlow Lite 实现移动端垃圾分类识别
开发语言·前端·数据库·人工智能·python·html
蜡笔小嘟1 分钟前
使用gemini 3 pro实现可视化大屏
前端·ai·gemini·gemini3peo
马玉霞6 分钟前
vue3很丝滑的table表格向上滚动效果,多用于统计页面
前端·vue.js
用户952081611796 分钟前
百度地图JSAPI THREE Label 组件使用指南,轻松实现地图标签渲染
前端
SVIP1115911 分钟前
webpack入门 精细版
前端·webpack·node.js
畅畅畅哥哥11 分钟前
Next.js App Router 实战避坑:状态、缓存与测试
前端·前端框架
一水鉴天13 分钟前
整体设计 定稿 之20 拼语言表述体系之3 dashboard.html完整代码
java·前端·javascript
一颗烂土豆13 分钟前
React 大屏可视化适配方案:vfit-react 发布 🚀
前端·javascript·react.js
Qinana14 分钟前
构建一个融合前端、模拟后端与大模型服务的全栈 AI 应用
前端·后端·程序员
加洛斯16 分钟前
箭头函数的艺术:如何优雅的写好JS代码
前端·javascript