You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Earth Engine合并ee.FeatureCollection时如何保留原有属性?

问题根因

你当前的写法是将type、status属性设置在了FeatureCollection集合对象的层面,而非集合内包含的单个Feature要素上。merge()方法只会合并两个集合中的要素,不会自动把集合层面的属性继承到要素上,因此合并后查看要素时看不到对应属性。


方法1:创建集合时直接将属性挂载到Feature上(推荐)

创建FeatureCollection时,先给单个Feature设置属性,再封装为集合,合并后属性自然会保留,示例代码如下:

var trees = ee.FeatureCollection(
  ee.Feature(ee.Geometry.Point([-122.22599, 37.17605]))
  .set('type','Sycamore')
  .set('status', 'dead')
);
var trees2 = ee.FeatureCollection(
  ee.Feature(ee.Geometry.Point([-125.3456, 38.16578]))
  .set('type','Aspen')
  .set('status','alive')
);

var treesMerge = trees.merge(trees2);
print(treesMerge);

方法2:已设置集合层面属性的补救方案

如果不方便修改之前的集合创建代码,可以先遍历集合,把集合层面的属性同步到每个要素上,再执行合并操作:

// 你原先的集合定义
var trees = ee.FeatureCollection(ee.Geometry.Point([-122.22599, 37.17605])).set('type','Sycamore').set('status', 'dead');
var trees2 = ee.FeatureCollection(ee.Geometry.Point([-125.3456, 38.16578])).set('type','Aspen').set('status','alive');

// 定义工具函数:将集合的所有属性复制到内部每个要素上
function copyCollectionPropsToFeatures(collection) {
  // 获取集合所有属性的键值对
  var propKeys = collection.propertyNames();
  var propValues = propKeys.map(function(key) {
    return collection.get(key);
  });
  var propDict = ee.Dictionary.fromLists(propKeys, propValues);
  // 遍历所有要素赋值
  return collection.map(function(feature) {
    return feature.set(propDict);
  });
}

// 处理后合并
var treesMerge = copyCollectionPropsToFeatures(trees).merge(copyCollectionPropsToFeatures(trees2));
print(treesMerge);

如果你使用R语言的rgee包实现该逻辑,只需要将JS的链式调用替换为rgee的$调用语法即可,逻辑完全一致。


内容的提问来源于stack exchange,提问作者Alexis Moyer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:09:03