使用Google Earth Engine在具有栅格和矢量数据的像素ID级别上构建表格数据集的最佳方法是什么?

时间:2019-06-04 20:15:51

标签: google-earth-engine

我是Earth Engine的新手,并且很难确定基于栅格和矢量数据输入以及感兴趣的地理点在像素级别获取表格数据的最佳方法。

我有一个非洲地区的兴趣点(“兴趣”),汉森全球森林覆盖监视栅格(“ gfc2014_c”)和撒哈拉以南非洲地区和国家的Shapefile(“ 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数据(所有基础波段)。但是我还需要来自shapefile的信息-我需要变量来标识点所在的几何形状。

我找到的包含有关此任务的某些信息的页面是here:

因此,我仅使用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不是函数”

即使我可以使用上面的功能,我也不知道如何从shapefile中提取其他信息。最终结果应具有兴趣点ID(在融合表中),兴趣点国家/地区,兴趣点的所有Hansen数据值。

我非常感谢任何线索或建议!非常感谢您的宝贵时间!

1 个答案:

答案 0 :(得分:0)

我有一种方法可以做到这一点。由于我无法访问您的图层,因此我自由了,并创建了一些自己的点和多边形。

首先,您需要将属性从多边形复制到该多边形内的所有点。我首先在空间上连接多边形(SSA)和点(兴趣)层,以便可以在多边形中拥有点的属性。我可以通过创建一个连接对象来做到这一点,该对象看起来是 .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
})

您可以看到一个有效的示例here