Каков наилучший метод построения табличного набора данных на уровне идентификатора пикселя с использованием растровых и векторных данных с использованием Google Earth Engine? - PullRequest
0 голосов
/ 04 июня 2019

Я новичок в Earth Engine, и мне трудно определить, какой лучший метод получения табличных данных на уровне пикселей основан на входных растровых и векторных данных и географических точках интереса.

У меня естьсводная таблица географических точек интереса для Африки («интерес»), растров Hansen Global Forest Cover Watch («gfc2014_c») и шейп-файла районов и стран Африки к югу от Сахары («SSA»).

//Load the Hansen data and create layers
var gfc2014 = ee.Image('UMD/hansen/global_forest_change_2015');

//Load the SSA administrative district shapefile
var SSA = ee.FeatureCollection('users/salem043/Africa_Districts')

//Crop the Hansen data we are interested in to the SSA admin shapefile
var gfc2014_c = gfc2014.clip(SSA);

//Load the data points of interest from the fusion table
var interest = ee.FeatureCollection('ft:1DCL5m_EO8kKMis2BWTdzfg-i9uc4uAZ2xNLQuhf7');

Я хочу извлечь данные GFC (все основные полосы) для каждой из достопримечательностей.Но мне также нужна информация из шейп-файла - мне нужны переменные, которые определяют, в какой геометрии лежат точки.

Одна страница, на которой я нашел информацию об этой задаче, была здесь:

Итак, я попробовал их метод, просто используя данные GFC, который выглядит следующим образом (опять же, в основном это взято по ссылке выше).

var mapfunc = function(feat) {
  // get feature id
  var id = ee.String(feat.id())
  // get feature geometry
  var geom = feat.geometry()
  // make an empty list to store the features
  var newfc = ee.List([])
  // function to iterate over the ImageCollection
  var addProp = function(img, fc) {
    // the initial value is the empty list
    fc = ee.List(fc)
    // get the date as string
    var date = img.date().format()
    // extract the value of 'waterClass'
    var value = img.reduceRegion(ee.Reducer.first(), geom, 30).get('waterClass')
    // If the value is null then store it as 'No data'
    var val = ee.String(ee.Algorithms.If(value, ee.String(value), ee.String('No data')))
    // make the name of the feature (feat_id-date)
    var featname = ee.String("feat_").cat(id).cat(ee.String("-")).cat(date)
    // make the Feature
    var newfeat = ee.Feature(geom, {name:featname,
                                    value:val})
    // add the value to the list
    return fc.add(newfeat)
  }
  var newfeat = ee.FeatureCollection(ee.List(gfc2014.iterate(addProp, newfc)))
  return newfeat
};

var newft = interest.map(mapfunc).flatten();

Export.table.toDrive(newft,
"export_Points",
"export_Points",
"export_Points");

Когда я запускаю это, я получаюошибка, что «gfc2014.iterate не является функцией»

Даже если бы я мог заставить работать вышеупомянутую функцию, я не знаю, как также извлечь другую информацию из шейп-файла.Конечный результат должен иметь идентификатор точки интереса (который находится в таблице слияния), страну точки интереса, район и все значения данных Хансена для точки интереса.

Я так благодарен за любые ссылки илипредложения!Большое вам спасибо за ваше время!

1 Ответ

0 голосов
/ 10 июня 2019

У меня есть один из способов сделать это.Поскольку ваши слои были мне недоступны, я взял на себя смелость и создал пару собственных точек и многоугольников.

Сначала вам нужно скопировать свойства из ваших многоугольников во все точки, которые лежат в этом многоугольнике.,Я делаю это, сначала пространственно соединяя слои многоугольника (SSA) и точки (интереса), чтобы у меня были свойства точек в многоугольниках.Я могу сделать это, создав объект Join, который смотрит на .geo

// Define a spatial filter as geometries that intersect.
var spatialFilter = ee.Filter.intersects({
  leftField: '.geo',
  rightField: '.geo'
});

// Join the points and polygons and apply spatial filter to keep only
// intersecting ones
var joinAll = ee.Join.saveAll('matched').apply(points, poly, spatialFilter);

Так как соединение просто добавляет квалифицирующие полигоны в качестве нового свойства точки, я делаю это, чтобы извлечьинформация.

var featuresWithProp = joinAll.map(function(feature){
  var joinedFeat =  ee.List(feature.get('matched'));
  var polygon = ee.Feature(ee.FeatureCollection(joinedFeat).first());
  return ee.Feature(feature.copyProperties(polygon, properties)).select(properties);
});

Наконец, я сэмплирую слой gfc, используя эти точки

var sampledPoints = gfc2014.sampleRegions({
  collection:featuresWithProp,
  properties:properties,
  scale:30,
  geometries:true
})

Вы можете увидеть рабочий пример здесь

...