调用ArcGIS REST接口返回200但生成空JSON文件问题求助
ArcGIS REST接口查询无数据问题排查与解决
核心问题是你的请求参数缺少图层ID(layer)——ArcGIS FeatureServer的查询接口必须指定要查询的图层,否则接口不知道返回哪个图层的要素,自然会返回空数据。
修复步骤
- 给请求参数添加
layer字段:目标服务的第一个图层ID通常是0,你可以通过访问服务主页(去掉URL末尾的/query)确认具体图层ID - 验证返回数据:打印接口返回的文本内容,确认
features数组存在且有数据 - 处理分页:如果数据量超过接口默认上限(一般是1000条),需要用
resultOffset和resultRecordCount参数分批获取数据
修正后的完整代码
import requests import json import arcpy # 补充layer参数,指定要查询的图层ID params = { 'where': '1=1', 'outFields': '*', 'f': 'json', 'returnGeometry': True, 'geometryType': 'esriGeometryPolygon', 'layer': '0' # 必填参数:指定查询的图层ID } # 目标接口地址 url = "https://gis.cachecounty.org/arcgis/rest/services/BaseMap/Parcels_Current/FeatureServer/query" r = requests.get(url, params) # 打印完整返回内容,方便排查问题 print(r.text) data = r.json() # 检查是否有返回要素 if 'features' in data and len(data['features']) > 0: # 保存JSON到本地 json_file_path = "你的JSON文件路径" with open(json_file_path, 'w') as f: json.dump(data, f) # 转换为本地要素类 arcpy.JSONToFeatures_conversion(json_file_path, "你的目标要素类路径") else: print("返回数据为空,请检查图层ID参数或服务权限")
额外注意事项
- 确认图层ID:访问服务主页可以看到所有可用图层及其ID,确保你指定的图层是包含 parcels 数据的那个
- 大数据量处理:如果要素总数超过1000条,需要循环调用接口,每次设置
resultOffset为上一次的偏移量,例如:result_record_count = 1000 offset = 0 all_features = [] while True: params['resultOffset'] = offset params['resultRecordCount'] = result_record_count r = requests.get(url, params) data = r.json() features = data.get('features', []) if not features: break all_features.extend(features) offset += result_record_count # 将all_features整理成标准ArcGIS JSON格式后保存 final_data = {'features': all_features, 'geometryType': 'esriGeometryPolygon'}
内容的提问来源于stack exchange,提问作者Kori Kurtzeborn
相关产品推荐
相关产品推荐

