使用ArcGIS API for Python进行'upsert'时出现未知错误

0 投票
1 回答
14 浏览
提问于 2025-04-12 17:00

我正在通过ArcGIS Python API对一个功能层进行“更新插入”(upsert)操作。我的输入数据是一个geojson文件,按照可用的指南进行上传:

data_item = gis.content.add(
    item_properties={
        'title': 'My Data File',
        'type': 'GeoJson',  
        'overwrite': True,
    },
    data="myfile.geojson"
)

然后我尝试进行追加操作:

my_layer.append(
    item_id=data_item.id,
    upload_format='geojson', 
    upsert=True,
    upsert_matching_field='an_unique_field',
    update_geometry=True,
)

结果返回了Exception: Unknown Error (Error Code: 500)。我确认这个geojson文件是有效的(在geojson.io上检查过)。尝试用一个更小的文件(原文件大约有4000个多边形)或者用featureCollection而不是geojson进行追加,结果也都是同样的错误。通过ArcGIS在线手动更新数据时,使用的正是同一个文件,操作是正常的。有没有什么线索可以帮助我解决这个问题?

我成功地使用edit_features()方法完成了这个操作,而不是append(),但这需要先查询图层,把OBJECTIDs映射到an_unique_field,然后创建单独的addsupdates集合,最后把这些集合分成250个特征一组。我希望能通过一次append调用来跳过这些步骤,如果可能的话。

1 个回答

1

问题出在upsert_matching_field这个字段上,因为它有缺失的值。我在其他一些属性上也有缺失值(那些属性是允许为空的)。修正了这些缺失值后,unknown error的错误消失了,但这个功能还是没法完成(它运行了两个小时后,出现了权限被拒绝的错误)。

这有点傻,但其实这个问题应该写得更清楚一些,错误信息也应该更有帮助。我原本以为这个方法会跳过空值或假值。关于source_table_name是必填的这一点,文档上也有点问题。

撰写回答