GEE学习——重投影/坐标变换

文章介绍了在GoogleEarthEngine(GEE)中,输入影像的投影通常由输出决定,并通过代码示例展示了如何对MODIS影像进行单位标度归一化。在处理MODISLAI产品时,由于投影不匹配导致的问题,通过使用reproject函数进行重投影到WGS84坐标系,并讨论了指定尺度以保持分辨率不变的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.gee官方文档学习

首先需要明白gee中输入的投影往往由输出的投影决定,学习如下代码

// The input image has a SR-ORG:6974 (sinusoidal) projection.
var image = ee.Image('MODIS/061/MOD13A1/2014_05_09').select(0);

// Normalize the image and add it to the map.
var rescaled = image.unitScale(-2000, 10000);//使输入值的范围 [low, high] 变为 [0, 1]
var visParams = {min: 0.15, max: 0.7};
Map.addLayer(rescaled, visParams, 'Rescaled');

gee运行上述代码时,输入的MODIS影像为正弦投影,而对影像进行标准化unitScale()后在地图展示窗口显示输出。而Map展示的投影为墨卡托投影,而 “输入的投影往往由输出的投影决定”,所以unitScale()的运算也是在墨卡托投影下进行的。

但是在绝大多数用例中,没有投影不是问题,实际上是一种有价值的优化,因为它允许在任何缩放级别预览结果,而无需等待全分辨率计算完成。

2.重投影/坐标变换实验

本次试验主要以modis LAI产品(MOD15A2H.061: Terra Leaf Area Index/FPAR 8-Day Global 500m)为例,该产品是一个 500 米分辨率的 8 天复合数据集。

首先导入一个自己感兴趣的研究区,在进行时间与范围影像筛选,代码如下(研究区需自行定义)

注:MODIS LAI产品存储时将数值扩大了10倍,故需整幅影像乘以尺度因子0.1

var roi = study_area.geometry();
//定义modis lai产品数据时间
var Date_Start = ee.Date('2014-02-05');//定义起始时间
var Date_End = ee.Date('2014-02-13');//定义终止时间
var LAI_collection=modisLAI
    .filterDate(Date_Start, Date_End)
    .filterBounds(roi)
    .select('Lai_500m')
    .map(function(image){
                            return image.multiply(0.1);
                          });
print('modis LAI:', LAI_collection); 

检索结果:

当我们想裁剪感兴趣区的MODIS LAI数据时,系统则报错

 

 故需使用重投影工具(即reproject()),使用reproject("EPSG:4326")将其转换为与roi区域一致的WGS84地理坐标,.reproject()函数用以变换指定图层的坐标系,"EPSG:4326"参数是WGS1984地理坐标系,修改后的代码如下,则不再报错。

var Date_Start = ee.Date('2014-02-05');//定义起始时间
var Date_End = ee.Date('2014-02-13');//定义终止时间
var LAI_collection=modisLAI
    .filterDate(Date_Start, Date_End)
    .filterBounds(roi)
    .select('Lai_500m')
    .map(function(image){
                            return image.multiply(0.1);
                          });
print('modis LAI:', LAI_collection); 
var LAI=LAI_collection.first().reproject("EPSG:4326");
Map.addLayer(LAI.clip(roi));

但是查看变换后的分辨率,会发现降低了很多,变为了111km左右,相当于1度。

print("New resolution is:",LAI.projection().nominalScale());

 

 故使用reproject工具时最好指定相应的尺度,如下所示两种方法

方法一:

var LAI=LAI_collection.first().reproject({crs:"EPSG:4326",scale:500});
print("New resolution is:",LAI.projection().nominalScale());

 方法二:

var roiprojection=roi.projection();
var LAI=LAI_collection.first().reproject(roiprojection.atScale(500));
print("New resolution is:",LAI.projection().nominalScale());

变换后的分辨率就不会改变了 

 

 

### 实现地理投影变换的方法 #### Python中的`pyproj`库用于地理坐标到UTM坐标的转换 对于将地理坐标(经度,纬度)转换成UTM投影坐标的任务,可以利用Python中的`pyproj`库来完成。此库提供了强大的功能来进行不同坐标系之间的转换工作。 ```python from pyproj import Transformer def geographic_to_utm(longitude, latitude): transformer = Transformer.from_crs("epsg:4326", "epsg:32618") # WGS 84 to UTM zone 18N as an example easting, northing = transformer.transform(latitude, longitude) return easting, northing easting, northing = geographic_to_utm(-73.935242, 40.730610) # Example coordinates for New York City print(f"Easting: {easting}, Northing: {northing}") ``` 上述代码展示了如何创建一个从WGS 84地理坐标系到特定UTM区域的转换器,并应用该转换器于给定的一组经纬度上[^1]。 #### MapInfo中查看和设置坐标系 当提到在MapInfo软件里处理像北京54这样的自定义或地方性坐标系统时,用户需确认当前使用的地图数据集所关联的是哪一个具体的坐标参照系(CRS),并据此调整视图选项或是导入新的CRS定义文件以便正确解释空间位置信息。 为了验证某一点在北京54参考平面上的确切表示形式——即其对应的X,Y值是否等于(4231898, 21655933),应当先确保选择了适当的地图投影方式以及相应的椭球模型参数配置[^2]。 #### Google Earth Engine (GEE)平台上的重投影操作 最后,在Google Earth Engine环境中执行图像或其他矢量要素的数据集重新映射至另一目标坐标系统的流程相对简单直观。通过调用`.reproject()`方法可指定源影像应该被转投向哪个标准的空间参考框架下;而如果要改变默认采用的最近邻插值策略,则额外提供有`.resample()`或者`.reduceResolution()`两种途径供开发者选择适用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dropout_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值