Как создать набор функций со средними значениями определенных функций и расположением / формой другой коллекции функций?

У меня есть две коллекции объектов: одна содержит точечные данные с измерениями, а другая - многоугольники, отмечающие различные кластеры, в которых несколько измерений были выполнены близко друг к другу. В движке Google Earth я пытаюсь создать новую (точечную) коллекцию объектов (или отредактировать полигональные объекты), которые содержат средние измеренные значения для каждого отдельного кластера.

Я использовал следующий код для объединения двух разных коллекций пространственных объектов (чтобы полигоны также содержали точечные данные):

 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, я получу набор функций со средними значениями для (измеренной) атрибутивной глины. Однако каждая функция получает одно и то же значение (среднее значение всех измеренных точек, а не только тех, которые находятся в определенном кластере).

Для ясности: у меня есть шейп-файл с 78 точками измерения (точками), которые загружаются в мой скрипт как набор функций и содержат измеренные значения. Помимо этого, у меня также есть шейп-файл с полигонами, обозначающими 16 областей, в которых был выполнен кластер измерений (то есть около 4-5 измерений в каждом кластере). Теперь я пытаюсь получить среднее значение всех измерений (точек) в каждом многоугольнике (кластере) для каждого отдельного многоугольника.


person lcasse    schedule 01.09.2020    source источник
comment
Я не уверен, что понимаю форму ваших данных, но смотрели ли вы ee.FeatureCollection.map(), чтобы суммировать местоположения точек, содержащихся в каждом многоугольнике?   -  person blindjesse    schedule 01.09.2020
comment
Я пробовал что-то с ee.FeatureCollection.map(), однако я новичок в Google Earth Engine и не получаю желаемых результатов. Я добавил дополнительную информацию в свой исходный вопрос. Надеюсь, теперь стало понятнее.   -  person lcasse    schedule 02.09.2020
comment
В сопоставленной функции вместо Measurements вы должны использовать feature.get для извлечения свойства, которое вы хотите суммировать.   -  person blindjesse    schedule 02.09.2020


Ответы (1)


Я решил это, используя 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)
})
person lcasse    schedule 03.09.2020