赞
踩
在GEE中实现提取特定点位的栅格值,这一功能有很大的用途,通常为地面站点或者地面采样点的位置,从特定的产品集中提取数据。例如:多光谱反射率,气象参数,植被指数等等。也介绍了像元二分模型计算植被盖度FVC的方法。(max:95%, min:5%)
下面是具体的思路解释,代码也有详细的注释,有点懒没有对代码拆分进行介绍。
该案例以欧亚大陆为ROI,进行部分点数据集的提取
//配色盘,可以自行定义,用于图层色阶的展示 var palettes = require('users/gena/packages:palettes'); var palette = palettes.misc.cubehelix[7]; // 定义了函数,这部分是批量化的时候需要改变的参数 var roi = region var output_name = 'export result' var point = samples var start_time = '2018-07-15' var end_time = '2018-08-15' var features = ['Sample_ID','Latitude','Longitude','NDVI','EVI','LAI', 'b1','b2','b3','b4','b5','b6','b7', 'FVC'] /*************************************************************** 1.定义样本点(经纬度信息) ***************************************************************/ // var roi = region // var point = sample Map.centerObject(point,4) Map.addLayer(point,{color:'red'},'sample_point') print(point) /*************************************************************** 2.制作数据集,从GEE中提取需要的产品集。(以MODIS为例进行介绍) ***************************************************************/ // 2.1 选择MODIS的植被指数产品——VIs // var start_time = '2020-7-01' // var end_time = '2020-08-31' var collection_mod1 = ee.ImageCollection("MODIS/061/MOD13A2") .filterBounds(roi) .filterDate(start_time, end_time); //select feature (NDVI,EVI) var VIs = collection_mod1.select(["NDVI","EVI"]); // 计算真实的数据值 var multiply = function(image){ // multply image var img = image.multiply(0.0001); return img.clip(roi) }; VIs = VIs.map(multiply).mean(); // 加载图层看一下 Map.addLayer(VIs.select('NDVI'), {min:0, max:1, palette:palette}, 'NDVI');//.select('NDVI') // 2.2提取MODIS的光谱数据___各波段的SR function rmCloud(image) { // MODIS remove cloud var qa = image.select('StateQA'); var cloudBitMask = 1 << 0-1; var cirrusBitMask = 1 << 2; var cirrusBitMask1 = 1 << 8-9; var cirrusBitMask2 = 1 << 10; var cirrusBitMask3 = 1 << 12; var cirrusBitMask4 = 1 << 15; var mask = qa.bitwiseAnd(cloudBitMask).eq(0) .and(qa.bitwiseAnd(cirrusBitMask).eq(0)) .and(qa.bitwiseAnd(cirrusBitMask1).eq(0)) .and(qa.bitwiseAnd(cirrusBitMask2).eq(0)) .and(qa.bitwiseAnd(cirrusBitMask3).eq(0)) .and(qa.bitwiseAnd(cirrusBitMask4).eq(0)); return image.updateMask(mask); } var SR_Col = ee.ImageCollection('MODIS/006/MOD09A1') .filterBounds(roi) .filterDate(start_time, end_time) .map(rmCloud) .select(['sur_refl_b01','sur_refl_b02','sur_refl_b03','sur_refl_b04','sur_refl_b05','sur_refl_b06','sur_refl_b07'], ['b1','b2','b3','b4','b5','b6','b7',]) var SR_Col = SR_Col.map(multiply).mean() // print(SR_Col, 'SR_Col') Map.addLayer(SR_Col.select('b7'), {min:0, max:1, palette:palette}, 'B7');//.select('b7') // 2.3MODIS的叶面积指数___LAI var LAI_Col = ee.ImageCollection("MODIS/006/MCD15A3H") .filterBounds(roi) .filterDate(start_time, end_time) .select('Lai') var LAI = LAI_Col.mean().clip(roi).multiply(0.1).rename('LAI') // print(LAI, 'LAI') Map.addLayer(LAI, {min:0, max:1, palette:palette}, 'LAI'); // 2.4计算植被盖度_____FVC function calFVC(BestVI,region,scale){ var num = BestVI.reduceRegion({ reducer:ee.Reducer.percentile([5,95]), geometry:region, scale:scale, maxPixels:1e13 }); print(num) var min = ee.Number(num.get("NDVI_p5")); var max = ee.Number(num.get("NDVI_p95")); //print(top_min); //print(top_max); var greaterPart = BestVI.gt(max); var lessPart = BestVI.lt(min); var middlePart =ee.Image(1).subtract(greaterPart).subtract(lessPart); //calculate FVC var tempf1=BestVI.subtract(min).divide(max.subtract(min)); var FVC=ee.Image(1).multiply(greaterPart).add(ee.Image(0).multiply(lessPart)) .add(tempf1.multiply(middlePart)) return FVC.rename('FVC'); } var FVC = calFVC(VIs.select('NDVI'),roi,1000) print(FVC,'FVC') Map.addLayer(FVC, {min:0, max:1, palette:palette}, 'FVC'); // 2.将第一部分提取的数据整合到一块,构建一个数据集 var Datesets = VIs.addBands([LAI, SR_Col, FVC]) // var Datesets = VIs.addBands(SR_Col) print(Datesets,'Datasets') /*************************************************************** 3. 值提取到点 能实现这个功能的有很多函数,介绍下sampleRegions() ***************************************************************/ // extract feature_ var samples_datesets=Datesets.sampleRegions({ collection:point, // properties:["Sample_ID","Longitude","Latitude"], scale:1000 }) print('result_extract', samples_datesets) /*************************************************************** 4.将数据转为列表导出结果 ***************************************************************/ //export Export.table.toDrive({ collection:samples_datesets, description: output_name, folder:'Height_datasets(Spectra)', selectors: features })
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。