使用ArcGIS API for Python进行'upsert'时出现未知错误
我正在通过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
,然后创建单独的adds
和updates
集合,最后把这些集合分成250个特征一组。我希望能通过一次append
调用来跳过这些步骤,如果可能的话。
1 个回答
1
问题出在upsert_matching_field
这个字段上,因为它有缺失的值。我在其他一些属性上也有缺失值(那些属性是允许为空的)。修正了这些缺失值后,unknown error
的错误消失了,但这个功能还是没法完成(它运行了两个小时后,出现了权限被拒绝的错误)。
这有点傻,但其实这个问题应该写得更清楚一些,错误信息也应该更有帮助。我原本以为这个方法会跳过空值或假值。关于source_table_name
是必填的这一点,文档上也有点问题。