GEEer成长日记三:Landsat8_NDVI产品逐月时间序列分析

本文介绍两种Landsat8的NDVI产品,包括32天和8天周期的产品,并以广东省2020年的数据为例,进行时间序列分析及趋势线绘制。

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

  继上一次介绍MODIS_NDVI产品的时间序列,今天小编继续为大家介绍两种常用的Landsat8的NDVI产品,并以广东省为例,分析2020年的时间序列。并加入趋势线分析。

  后期我们会带大家研究LANDSAT8_T1_SR系列和Sentinel-2在NDVI时间序列方面的研究。

一、LANDSAT/LC08/C01/T1_32DAY_NDVI

  先看看官方介绍:这些 Landsat 8 Collection 1 Tier 1 复合材料由 Tier 1 正射校正场景制成,使用计算的大气顶 (TOA) 反射率。Chander et al(2009) 。有关 TOA 计算的详细信息。

  归一化差异植被指数是从每个场景的近红外波段和红波段生成的(NIR - Red)/(NIR + Red),其值范围从 -1.0 到 1.0。

  这些合成是根据从一年的第一天开始到一年的第 352 天的每 32 天期间的所有场景创建的。从第 353 天开始,今年的最后一个组合将与下一年的第一个组合重叠 20 天。每个 32 天期间的所有图像都包含在合成中,最近的像素作为合成值。

  分辨率:30m

  波段介绍:

  既然是32天产品,我们在此就先介绍一下2020年它的时间序列吧!

  首先需要调用这个数据集,并选取NDVI波段

var geometry = ee.FeatureCollection('users/ZhengkunWang/guangdongsheng')
Map.centerObject(geometry,6) 
//选择一个简单点的配色
var colorizedVis = {
  min: -0.8,
  max: 0.8,
  palette: ['blue', 'white', 'green'],
};

//选取影像集
var NDVI_32days = ee.ImageCollection("LANDSAT/LC08/C01/T1_32DAY_NDVI")
                     .filterDate('2020-01-01', '2020-12-31')
                     .select('NDVI');
print(NDVI_32days)//方便看看这一年有多少副影像

   我们可以看出,2020年有12幅影像。看到12的时候不禁在想,是不是可以代表月平均值呢?

   接下来看看它配色后的效果,还有时间序列的情况。

//时间序列分析

print(ui.Chart.image.series(NDVI_32days, geometry, ee.Reducer.mean(), 500));

   第一个产品就展示到这里,代码可以直接复制去演示一遍,这个这线图可以导出CSV。大家有什么不同的想法和意见可以在公众号留言。

二、LANDSAT/LC08/C01/T1_8DAY_NDVI

  这个产品和第一个产品来源基本一样的。只是制作周期不一样。

  继续看看官方介绍:这些 Landsat 8 Collection 1 Tier 1 复合材料由 Tier 1 正射校正场景制成,使用计算的大气顶 (TOA) 反射率。See Chander et al. (2009) 有关 TOA 计算的详细信息。

  归一化差异植被指数是从每个场景的近红外波段和红波段生成的(NIR - Red)/(NIR + Red),其值范围从 -1.0 到 1.0。

  这些合成是根据从一年的第一天开始到一年的第 360 天的每 8 天时间段内的所有场景创建的。从第 361 天开始,今年的最后一个组合将与下一年的第一个组合重叠 3 天。每个 8 天期间的所有图像都包含在合成中,最近的像素作为合成值。

  多的就不说了,继续看他的效果。

//老样子,还是先加载影像
var NDVI_8days = ee.ImageCollection("LANDSAT/LC08/C01/T1_8DAY_NDVI")
                     .filterDate('2020-01-01', '2020-12-31')
                     .select('NDVI');
print(NDVI_8days)
Map.addLayer(NDVI_8days.mean().clip(geometry), colorizedVis, 'NDVI_8days');

 再看看时间序列,结果是酱紫:

print(ui.Chart.image.series(NDVI_8days, geometry, ee.Reducer.mean(), 500));

   全年一共46幅影像,接下来我们继续看看它的趋势线。


var NDVI_8daystrendline = Chart.image.series(NDVI_8days, geometry, ee.Reducer.mean(), 500);
NDVI_8daystrendline = NDVI_8daystrendline
    .setOptions({
        title: 'T1_8DAY_NDVI',
        hAxis: {title: 'Date', gridlines: {count: 10}},
        vAxis: {title: 'NDVI',viewWindowMode: 'explicit', viewWindow: {max: 1,min: -0.25,},gridlines: {count: 5,}},
        interpolateNulls: true, 
        lineWidth: 1,
    pointSize: 1,
    trendlines: { 0: {title: 'NDVI_mean',type:'linear',  color:'red', visibleInLegend: true}}
    });
print(NDVI_8daystrendline)

  做到这里,小编还是觉得不太够,再做一个月平均的时间序列吧。安排!


//先筛选我们研究的时间范围
var years = ee.List.sequence(2020, 2020);
var months = ee.List.sequence(1, 12);
var NDVI_8daysmeanNDVI =  ee.ImageCollection.fromImages(
  years.map(function (y) {
    return months.map(function(m) {
    return NDVI_8days.filter(ee.Filter.calendarRange(y,y, 'year')).filter(ee.Filter.calendarRange(m, m, 'month')).mean().set('year', y).set('month', m).set('system:time_start', ee.Date.fromYMD(y, m, 1));
    });
  }).flatten()
);
// Create and print charts.
Map.addLayer(NDVI_8daysmeanNDVI.mean().clip(geometry), colorizedVis, 'NDVI_8daysmeanNDVI');
print(ui.Chart.image.series(NDVI_8daysmeanNDVI, geometry, ee.Reducer.mean(), 500));

 

  其实不用看结果都能明白,和32天产品的区别不是很大。

  公众号后台回复:122501 即可获取上述代码。如果真的可以帮到你,记得给小编点个赞哦~

更多精彩内容请关注:

 

<think>好的,用户遇到了在使用Forest工具从Landsat8的TIFF文件中提取指定位置的NDVI值时出错了。我需要先理解这个错误的具体情况。首先,用户提到的错误信息是“error extracting NDVI values from Landsat8 tif file using Forest tool at origin location 118.59836858684001/35.36415745299003”。看起来问题发生在坐标点(118.59836858684001, 35.36415745299003)处提取NDVI值时出现的错误。 接下来,我需要考虑可能的原因。首先,坐标点是否正确?用户提供的坐标是否在TIFF文件的覆盖范围内?有时候,如果坐标超出范围或者投影不匹配,会导致提取失败。其次,文件是否损坏?比如,用户之前提到的yarn安装错误中,有文件损坏的情况,可能这里TIFF文件也有类似的问题。再者,权限问题,比如文件被占用或锁定,无法读取,就像引用[1]中的EBUSY错误那样。还有可能是软件工具的问题,比如Forest工具本身的bug或者配置错误。 然后,我需要逐一排查这些可能性。首先,检查坐标点的有效性。用户需要确认该坐标是否在Landsat8影像的地理范围内,可以使用GIS软件如QGIS打开TIFF文件,查看坐标点是否在影像覆盖区域内。其次,检查TIFF文件的完整性,是否有损坏。用户可以使用GDAL的gdalinfo命令检查文件是否能正常读取,或者在其他工具中尝试打开文件。如果文件损坏,可能需要重新下载数据。 另外,权限问题也可能存在,尤其是在Windows系统上,如果文件被其他程序占用,可能会出现类似引用[1]中的资源忙的错误。用户需要确保没有其他程序正在使用该TIFF文件,或者尝试将文件复制到另一个位置再处理。 还有可能是投影问题。Landsat8的数据通常是UTM投影,而用户提供的坐标是经纬度,可能需要将坐标转换为对应的投影坐标系才能正确提取值。这时候需要使用坐标转换工具,比如GDAL的ogr2ogr或者Python的pyproj库进行转换。 另外,软件工具Forest的问题也不可忽视。用户应检查Forest工具的版本,是否有已知的bug,或者尝试使用其他工具如GDAL的gdalinfo或Python的rasterio库来提取值,以确定是否是工具本身的问题。 最后,用户可能需要查看更详细的错误日志,了解具体的错误原因。比如,是否有权限不足、文件路径错误、内存不足等问题。根据引用[3]中的网络超时问题,有时网络问题也可能导致依赖项下载失败,但在这里可能不相关,不过可以考虑是否有环境配置的问题,比如路径设置是否正确。 总结来说,用户需要逐步验证坐标有效性、文件完整性、投影匹配性、权限问题以及工具本身的可靠性,从而定位并解决问题。</think>### 解决从Landsat8 TIFF文件中提取NDVI值错误的步骤 #### 1. 验证坐标点有效性 - **检查地理范围**:使用GIS工具(如QGIS)打开TIFF文件,确认坐标点$118.59836858684001/35.36415745299003$是否位于影像覆盖范围内。若超出范围,提取操作会失败。 - **投影匹配**:Landsat8影像通常采用UTM投影,而用户提供的坐标为经纬度格式(WGS84)。需使用坐标转换工具(如GDAL的`gdaltransform`)将经纬度转换为影像的投影坐标系[^1]。 #### 2. 检查TIFF文件完整性 - **使用GDAL验证**:执行命令`gdalinfo your_file.tif`,若输出中包含错误信息(如`ERROR 4: ...`),则文件可能损坏,需重新下载数据。 - **其他工具测试**:尝试用Python的`rasterio`库读取文件: ```python import rasterio with rasterio.open("your_file.tif") as src: print(src.profile) # 检查元数据 ``` #### 3. 排查权限与文件占用问题 - **资源锁定**:类似引用[1]中的`EBUSY`错误,检查文件是否被其他程序占用。在Windows中可通过资源监视器确认,或尝试复制文件到新路径后操作。 #### 4. 验证Forest工具配置 - **依赖项检查**:确保Forest工具所需的库(如GDAL、NumPy)已正确安装。参考引用[3]中网络超时问题,若依赖项缺失,需配置代理或手动安装。 - **替代工具测试**:使用Python脚本提取值: ```python import rasterio from rasterio.transform import from_origin with rasterio.open("ndvi.tif") as src: row, col = src.index(118.59836858684001, 35.36415745299003) value = src.read(1)[row, col] print(f"NDVI值:{value}") ``` #### 5. 查看详细错误日志 - **启用调试模式**:在Forest工具中启用日志输出,定位具体错误类型(如内存不足、无效索引等)。 - **系统资源监控**:检查操作时CPU/内存占用,避免资源不足导致提取失败。 --- ### 相关问题 1. 如何将经纬度坐标转换为UTM投影坐标? 2. 使用GDAL时出现`ERROR 4`如何解决? 3. 如何通过Python批量提取栅格文件中的特定位置值? --- ### 引用说明 [^1]: 坐标转换需依赖正确的地理编码库,类似引用[3]中的代理配置问题可能影响工具依赖项安装。 [^2]: 环境配置错误可能导致工具功能异常,需参考引用[2]中代理设置方法确保依赖项正常下载。 [^3]: 网络超时或依赖项缺失可能间接导致工具运行失败,需检查环境配置。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值