问题描述
我有两个要素集合,一个要素集合包含带有测量值的点数据,另一个要素多边形标记了不同簇的位置,在这些簇上进行了多次测量。在Google Earth Engine中,我试图创建一个新的(点)要素集合(或编辑面要素),其中包含每个单独群集的平均测量值。
我使用以下代码将两个不同的要素集合合并在一起(以便多边形也包含点数据):
var mean = ee.Filter.intersects({
leftField: '.geo',rightField: '.geo'
})
var saveAllJoin = ee.Join.saveAll({
matchesKey: 'Measurements',})
var intersect = saveAllJoin.apply(Clusters,Measurements,mean)
但是,由于在一个群集中进行了多次测量,所以这会导致一个特征集合,其中包含一个列表,其中列出了位于特定群集中的测量点。相反,我正在寻找平均测量值作为多边形的属性。在Google Earth引擎(或可能在QGIS中)执行此操作的方式是什么?
我尝试使用ee.FeatureCollection.map
来计算每个单独多边形的平均值:
var clust = ee.FeatureCollection(Clusters).map(function(feature) {
var meanClay = Measurements.reduceColumns({
reducer: ee.Reducer.mean(),selectors: ['Clay']
})
return feature.set('mean',meanClay)
})
现在,如果我打印变量“ clust”,我将得到一个特征集合,该集合具有(测量的)属性粘土的平均值。但是,每个要素都具有相同的值(所有测量点的平均值,而不仅仅是特定簇中的平均值)。
为清楚起见:我得到了一个Shapefile,其中包含78个测量位置(点),这些位置作为特征集合加载到脚本中并包含测量值。除此之外,我还有一个带有多边形的shapefile,该多边形指示执行一组测量的16个区域(每个组大约有4-5个测量)。现在,我试图获取每个单独多边形的每个多边形(群集)中所有测量值(点)的平均值。
解决方法
我通过在点数据上使用filterBounds()
来解决它。这里的filterBounds用于过滤点数据,使其仅包含特定集群中的点。
var clust = ee.FeatureCollection(Clusters).map(function(feature) {
var meanClay = ee.FeatureCollection(Measurements.filterBounds(feature.geometry()))
.reduceColumns({
reducer: ee.Reducer.mean(),selectors: ['Clay']
})
return feature.set(meanClay)
})