我正在尝试通过 ArcGIS API for Python 对要素图层执行“upsert”(更新 + 插入)操作。我的输入数据是一个 geojson 文件,根据可用的 guides:
上传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 Online 手动更新数据可以很好地处理完全相同的文件。这里有线索吗?
edit_features()
而不是 append()
执行了操作,但它需要查询图层,将 OBJECTID 映射到 an_unique_field
,创建单独的 adds
和 updates
集合,然后将集合拆分为250 个特征块。如果可能的话,我想通过一次 append
调用来跳过所有这些。
结果是由于
upsert_matching_field
中缺少值。我在其他属性中也缺少值(配置为允许空值)。更正这些问题后,就消除了 unknown error
,但该功能仍然无法完成(它运行了 2 小时,然后出现错误,并显示权限被拒绝的消息)。
有点愚蠢,但这可以更好地记录下来,并且错误应该提供更多信息。我假设该函数会跳过空白/虚假值。关于需要
source_table_name
的部分似乎也是一个文档缺陷。