如何使用某些特征的平均值以及其他特征集合的位置/形状来创建特征集合?

问题描述

我有两个要素集合,一个要素集合包含带有测量值的点数据,另一个要素多边形标记了不同簇的位置,在这些簇上进行了多次测量。在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)
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...