gpt4 book ai didi

json - 使用来自 Google Earth Engine 中图像集合中每个单独图像的波段的值填充 FeatureCollection

转载 作者:行者123 更新时间:2023-12-03 23:17:29 30 4
gpt4 key购买 nike

在 Google Earth Engine 中,我已将 Featurecollection 作为包含几个多边形的 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' 缺失或为空。
对象:{"type":"ArgumentRef","value":null}。

在我生成的 csv 文件中,我得到了一个名为 mean 的新列,但它填充了并且没有实际值。

最佳答案

没有理由使用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()

脚本: https://code.earthengine.google.com/b65a731c78f78a6f9e08300dcf552dff

相同的方法可以用于 reduceRegions()同样,先对图像进行映射,然后再对区域进行映射。但是,您必须映射生成的要素以设置日期。
images.filterBounds(f)如果您的功能覆盖更大的区域,也可以添加。

PS:你的表没有共享

关于json - 使用来自 Google Earth Engine 中图像集合中每个单独图像的波段的值填充 FeatureCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47718053/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com