大家好,
我试图在ArgGIS API for Python (on ArcGIS Online)中创建2个托管功能层之间的连接。我一直收到一个类型错误,我真的不知道如何处理它。
异常发生了一个一般错误:类型'set'的对象不是JSON可序列化的
下面是代码和输出:
joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship =[{“名称”、“设施”}),
summary_fields =[{“Current_Status”、“和”}))
TypeError回溯(最近的最后一次调用)/ opt / conda / lib / python3.6 /网站/ arcgis / gis / _impl / _con / _connection.py在帖子(self, path, params, files, **kwargs)662如果isinstance(v,(dict,列表,元组,保龄球)):- > 663参数个数[k]=json.转储(v)664elifisinstance(v,PropertyMap):/ opt / conda / lib / python3.6 / json / __init__ . py在转储(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls,缩进,分隔符,default, sort_keys, **kw)230default是None,不是sort_keys,也不是kw):- > 231返回_default_encoder.编码(obj)232如果cls是没有一个:/ opt / conda / lib / python3.6 / json / encoder.py在编码(自我,o)198#相当于“.join()”所做的PySequence_Fast。- > 199块=自我.iterencode(o,_one_shot=真正的)200如果不isinstance(块,(列表,元组)):/ opt / conda / lib / python3.6 / json / encoder.py在iterencode(self, 0, _one_shot)256自我。skipkeys _one_shot)- > 257返回_iterencode(o,0)258/ opt / conda / lib / python3.6 / json / encoder.py在默认的(自我,o)179抛出TypeError("类型'%s'的对象不是JSON可序列化的" %- > 180o.__class__.__name__)181TypeError在处理上述异常期间,发生了另一个异常:异常回溯(最近的最后一次调用)< ipython-input-26-cf1ae0f3dbb2 >在<模块>5spatial_relationship=”“,6attribute_relationship=[{“名称”,“设施”}],——> 7summary_fields =[{“Current_Status”、“和”}))/ opt / conda / lib / python3.6 /网站/ arcgis /功能/ summarize_data.py在join_features(target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, output_name, context, gis, estimate, future)640如果“summary_fields”不在参数个数:641参数个数[“summary_fields”]=summary_fields- > 642返回地理信息系统._tools.featureanalysis.join_features(**参数个数)/ opt / conda / lib / python3.6 /网站/ arcgis / _impl / tools.py在join_features(self, target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, output_name, context, estimate, records_to_match, future)2746output_name=output_name,2747上下文=上下文,地理信息系统=自我._gis,- > 2748未来= True)2749gpjob._is_fa=真正的2750如果未来:<字符串>在join_features(target_layer, join_layer, spatial_relationship, spatial_relationship_distance, spatial_relationship_distance_units, attribute_relationship, join_operation, summary_fields, records_to_match, output_name, context, join_type, gis, future)/ opt / conda / lib / python3.6 /网站/ arcgis /地理处理/ _support.py在_execute_gp_tool(gis, task_name, params, param_db, return_values, use_async, url, webtool, add_token, return_messages, future)388job_info=gptool._con.帖子(submit_url,gp_params)389其他的:- > 390job_info=gptool._con.帖子(submit_url,gp_params)391job_id=job_info[“jobId”]392如果未来:/ opt / conda / lib / python3.6 /网站/ arcgis / gis / _impl / _con / _connection.py在帖子(self, path, params, files, **kwargs)698"必须提供URL方案:%s" % errMS)699除了异常作为e:- > 700提高异常(“发生一般错误:%s”%e)701除了:702进口回溯异常发生了一个一般错误:类型'set'的对象不是JSON可序列化的
提前感谢!
解决了!进入解决方案。
好的,中间有一些帮助@DanPatterson这里有一些文档https://developers.arcgis.com/rest/services-reference/join-features.htm我设法把它修好了。我在属性关系中缺少了一些参数。最后的代码:
joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship=[{"targetField": "NAME", "joinField": "Facility", "operator": " equal "}],
summary_fields=[{"statisticType": "Sum", "onStatisticField": "Current_status"}])
我不这么想。我做了一些玩弄,我认为属性关系需要{},但现在我有一个错误与摘要字段,只是说“工作失败”。
joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship ={“名称”、“设施”},
summary_fields =(“Current_Status”、“金额”))
两个参数都表示一个字典列表。
attribute_relationship = [{"NAME": "Facility"}]
summary_fields = [{"Current_Status": "SUM"}]
a = [{"NAME": "Facility"}] type(a) list type(a[0]) dict
当然,我无法在文档中找到任何示例语法,因此,如果它是真的,请尝试使用dict列表
冒号起了作用
type({"NAME", "Facility"}) set type({"NAME": "Facility"}) dict
齿顶高
在他们的代码中找到了一个例子
summary_fields=[{"statisticType": "Mean", "onStatisticField": "Population"}
又名。字典项的列表
好的,中间有一些帮助@DanPatterson这里有一些文档https://developers.arcgis.com/rest/services-reference/join-features.htm我设法把它修好了。我在属性关系中缺少了一些参数。最后的代码:
joinData = join_features(target_layer=facilities,
join_layer =县、
output_name = " Facility_county_join ",
join_operation = " JoinOneToOne ",
spatial_relationship = " ",
attribute_relationship=[{"targetField": "NAME", "joinField": "Facility", "operator": " equal "}],
summary_fields=[{"statisticType": "Sum", "onStatisticField": "Current_status"}])