【问题标题】:Google Earth Engine: set Feature to FeatureCollection, but not a whole ArrayGoogle Earth Engine:将 Feature 设置为 FeatureCollection,但不是整个数组
【发布时间】:2017-09-08 09:23:02
【问题描述】:

我尝试将新功能添加到大型功能集合中,但使用函数 set() 会覆盖每个功能的整个列表。但我的目的是将数组中的每个值添加到相应的 FeatureCollection 中。有人可以帮帮我吗?

    var table = ee.FeatureCollection(ft:.....blablabla);

    **//Create an Array from the property DN in the FeatureCollection:**
        var propert = table.limit(100).aggregate_array('DN');
    *// Values less than 1 will be set to 1, larger than 1== 0:* 
        var limit =  ee.Array(propert).lt(1);
        print(limit);
     //Function, that add the list! of features (limit) to new property (Class) in the FeatureCollection ("table"). 
        var addFeature = function(ar) {
          return ar.set({Class: limit});
     //Map throw the Featurecollection table
        var areaAdded = table.limit(100).map(addArea);
        };

所以,如果您可以看到,我的代码将整个数组 [limit] 添加到 FeatureCollection 中的每个属性,而不是数组中的第一个值添加到第一个属性等等... 有人可以帮助我吗?谢谢

【问题讨论】:

    标签: arrays properties set google-earth-engine


    【解决方案1】:

    如果你有少量的特征,你可以将特征集合转换为列表,将数组转换为列表,zip()它们一起,在列表上映射一个函数来设置属性。玩具示例:

    var features = [
      ee.Feature(ee.Geometry.Rectangle(30.01, 59.80, 30.59, 60.15), {name: 'Voronoi'}),
      ee.Feature(ee.Geometry.Point(-73.96, 40.781), {name: 'Thiessen'}),
      ee.Feature(ee.Geometry.Point(6.4806, 50.8012), {name: 'Dirichlet'})
    ];
    
    var fromList = ee.FeatureCollection(features);
    
    var array = ee.Array([2, 3, 5]);
    
    var lists = fromList.toList(fromList.size()).zip(array.toList());
    
    var features = ee.FeatureCollection(lists.map(function(l) {
      return ee.Feature(ee.List(l).get(0)).set('foo', ee.List(l).get(1));
    }));
    print(features);
    

    【讨论】:

      猜你喜欢
      • 2014-05-01
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多