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

GEE Python API map采样报Invalid GeoJSON geometry错误求解

问题根因

这个报错和你上传的Asset几何有效性无关,核心原因是Python API对ee.Algorithms.If的分支返回类型校验比网页端JS编辑器严格,你的代码存在明确的类型不匹配问题:

  • 存在匹配影像时,filtered_img.sample()的返回值是ee.FeatureCollection——哪怕采样区域是单个点,返回结果也是包含1个点要素的要素集合
  • 无匹配影像时,你写的返回值是ee.Image类型,和if分支的返回类型完全不一致
    GEE执行map()操作前会做全链路类型校验,尝试将两个分支的返回值强制对齐为要素集合类型时,会尝试读取ee.Image对象的几何属性做GeoJSON解析,而你返回的自掩膜空影像没有绑定合法矢量几何,就会抛出Invalid GeoJSON geometry异常。
    JS端能正常运行是因为网页编辑器做了隐式类型容错,不代表这段逻辑本身是严谨的。
修复代码

把else分支的返回值改成和if分支完全一致的ee.FeatureCollection类型,直接用输入点的几何创建一个标记isNull=True的空要素即可,修正后的完整逻辑如下:

def extract_values(feat):
    # 解析要素日期构造筛选时间窗
    date = ee.Date.parse('YYYY-MM-dd HH:mm:ss', feat.get('date'))
    start = date.advance(-10, 'minute')
    end = date.advance(20, 'minute')

    # 取时间窗内第一景可用影像
    filtered_img = filtered.filterDate(start, end).first()

    training_samps = ee.Algorithms.If(
        filtered_img,
        # 有可用影像时执行采样,返回FeatureCollection
        filtered_img.sample(
            region=feat.geometry(),
            scale=2000,
            geometries=True
        ).set('isNull', False),
        # 无可用影像时返回同类型结果,用当前点几何构造空要素
        ee.FeatureCollection([
            ee.Feature(feat.geometry()).set('isNull', True)
        ])
    )
    return training_samps

# 注意:每个输入要素映射后返回的是子FeatureCollection,必须调用flatten()打平为单层要素集合
final_result = relatos_asset.map(extract_values).flatten()
注意事项
  • 遍历ee.FeatureCollection执行map()时,映射函数所有分支的返回值类型必须严格统一,禁止混合返回Image、Feature、FeatureCollection等不同类型的对象
  • 你之前尝试手动重构Point几何不生效,是因为问题根源不在输入几何,而在返回值类型不匹配
  • 必须加flatten()操作,否则最终得到的是嵌套结构的要素集合,后续导出、计算都会触发新的类型错误。

内容的提问来源于stack exchange,提问作者Caio Atila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:39:22