在 Google Earth Engine 中,我已将要素集合作为 JSON 加载,其中包含一些多边形。我想向此 FeatureCollection 添加列,它为我提供每个多边形以及图像集合中包含的多个图像中的每个图像的两个波段的平均值。
这是我到目前为止的代码。
//Polygons
var polygons = ee.FeatureCollection('ft:1_z8-9NMZnJie34pXG6l-3StxlcwSKSTJFfVbrdBA');
Map.addLayer(polygons);
//Date of interest
var start = ee.Date('2008-01-01');
var finish = ee.Date('2010-12-31');
//IMPORT Landsat IMAGEs
var Landsat = ee.ImageCollection('LANDSAT/LT05/C01/T1') //Landsat images
.filterBounds(polygons)
.filterDate(start,finish)
.select('B4','B3');
//Add ImageCollection to Map
Map.addLayer(Landsat);
//Map the function over the collection and display the result
print(Landsat);
// Empty Collection to fill
var ft = ee.FeatureCollection(ee.List([]))
var fill = function(img, ini) {
// type cast
var inift = ee.FeatureCollection(ini)
// gets the values for the points in the current img
var mean = img.reduceRegions({
collection:polygons,
reducer: ee.Reducer.mean(),
});
// Print the first feature, to illustrate the result.
print(ee.Feature(mean.first()).select(img.bandNames()));
// writes the mean in each feature
var ft2 = polygons.map(function(f){return f.set("mean", mean)})
// merges the FeatureCollections
return inift.merge(ft2)
// gets the date of the img
var date = img.date().format()
// writes the date in each feature
var ft3 = polygons.map(function(f){return f.set("date", date)})
// merges the FeatureCollections
return inift.merge(ft3)
}
// Iterates over the ImageCollection
var newft = ee.FeatureCollection(Landsat.iterate(fill, ft))
// Export
Export.table.toDrive(newft,
"anyDescription",
"anyFolder",
"test")
在控制台中我收到一条错误消息
元素(错误)
无法解码 JSON。
错误:对象 '{"type":"ArgumentRef","value":null}' 的字段 'value' 缺失或为 null。
对象:{“type”:“ArgumentRef”,“value”:null}。
在生成的 csv 文件中,我得到一个名为“平均值”的新列,但其中填充了实际值,并且没有实际值。
没有理由使用iterate()
这里。你能做的是嵌套map()
。在多边形上,然后在图像上。您可以将生成的列表列表展平,将其变成单个列表,如下所示:
// compute mean band values by mapping over polygons and then over images
var results = polygons.map(function(f) {
return images.map(function(i) {
var mean = i.reduceRegion({
geometry: f.geometry(),
reducer: ee.Reducer.mean(),
});
return f.setMulti(mean).set({date: i.date()})
})
})
// flatten
results = results.flatten()
Script: https://code.earthengine.google.com/b65a731c78f78a6f9e08300dcf552dff https://code.earthengine.google.com/b65a731c78f78a6f9e08300dcf552dff
可以使用相同的方法reduceRegions()
同样,映射到图像,然后映射到区域。但是,您必须映射生成的要素才能设置日期。
images.filterBounds(f)
如果您的功能覆盖更大的区域,也可以添加。
PS:你的桌子没有共享
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)