@Rodrigo,感谢您的及时回复。点提取代码非常适合该示例。我尝试对另一组应用了云遮罩的图像进行点提取,发现如果集合中第一张图像的第一个点落在遮罩之外(即在分配了“空”值的像素上),导出的表将不包含任何点的波段数据。为了解决这个问题,我添加了一个过滤器以在包含“空”值的点与特征集合合并之前删除它们。
下面的代码包含一个示例,其中包含不删除“null”值的失败提取和删除“null”值的成功提取。
//cloud mask ------------------------------------------------------
var maskCloudShadow = function(image){
var cfmask = image.select('cfmask');
return image.updateMask(cfmask.lt(1)); // keep clear (0) pixels
};
//select images from image collection -----------------------------
//extract filtered collection of Landsat 5 Surface Reflection
var L5fs1998post = ee.ImageCollection('LANDSAT/LT5_SR') //Landsat 5 Surface reflectance
.filterDate('1998-1-9', '1998-2-27') //filter to date bounds
.filter(ee.Filter.eq('wrs_path', 91))//filter to path and row
.filter(ee.Filter.eq('wrs_row', 86))
.map(maskCloudShadow); //apply cloud and cloud shadow mask function
print(L5fs1998post);
//Create sample points --------------------------------------------
//var pts =
ee.FeatureCollection('ft:1lfLgiQQSIIOpgjuZV5MZJno9_kLyQC49w6u3Hf9W');
var p1 = ee.Geometry.Point([146.84341192245483, -37.47371711676642]);
var p2 = ee.Geometry.Point([146.84167385101318, -37.4]);
var pts = ee.FeatureCollection(ee.List([ee.Feature(p1),ee.Feature(p2)]));
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]));
//Without removal of null values ----------------------------------
//Function to extract values from image collection based on point file and export as a table
var fill = function(img, ini) {
// type cast
var inift = ee.FeatureCollection(ini);
// gets the values for the points in the current img
var ft2 = img.reduceRegions(pts, ee.Reducer.first(),30);
// gets the date of the img
var date = img.date().format();
// writes the date in each feature
var ft3 = ft2.map(function(f){return f.set("date", date)});
// merges the FeatureCollections
return inift.merge(ft3);
};
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(L5fs1998post.iterate(fill, ft));
print(newft);
// Export
Export.table.toDrive(newft,
"anyDescription",
"EarthEngine",
"sample_include_null");
//With removal of null values ------------------------------------------
//Function to extract values from image collection based on point file and export as a table
var fill = function(img, ini) {
// type cast
var inift = ee.FeatureCollection(ini);
// gets the values for the points in the current img
var ft2 = img.reduceRegions(pts, ee.Reducer.first(),30);
// gets the date of the img
var date = img.date().format();
// writes the date in each feature
var ft3 = ft2.map(function(f){return f.set("date", date)});
// merges the FeatureCollections
var ft3a = ft3.filter(ee.Filter.neq('B1', null));//filter first to remove null values
return inift.merge(ft3a);
};
// Iterates over the ImageCollection
var newft_remove_null = ee.FeatureCollection(L5fs1998post.iterate(fill, ft));
print(newft_remove_null);
// Export
Export.table.toDrive(newft_remove_null,
"anyDescription",
"EarthEngine",
"sample_remove_null");
//plot cloudy scene and sample points ------------------------------------
var scene = ee.Image('LANDSAT/LT5_SR/LT50910861998042');
Map.setCenter(147, -37.5, 9);
Map.addLayer(scene, {bands: ['B3', 'B2', 'B1'], min: 0, max: 2000}, 'false-color composite');
Map.addLayer(pts);