You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ArcGIS API返回的JSON转换为结构化Pandas DataFrame

从ArcGIS API结果转换为Pandas DataFrame(按Object ID组织)

你已经成功调用ArcGIS的Viewshed服务并拿到了JSON结果,接下来只需提取要素数据并整理成DataFrame即可,核心是定位返回结果中的要素集合,再把每个要素的属性(含唯一OBJECTID)和几何信息整合到一起:

完整修改后的代码

import urllib.request as urlopen
import urllib.parse as urlencode
import urllib.request as request
import json
import pandas as pd

inPts = {"geometryType" : "esriGeometryPoint",
         "spatialReference" : {"wkid" : 54003},
         'features':[{'geometry': {'x': -13308192.1956127, 'y': 4221903.58555983}}]}
dist = {'distance':8.5,'units':'esriMiles'}

data = {'Input_Observation_Point': inPts,
        'Viewshed_Distance': dist,
        'f': 'pjson'}

URL = 'http://sampleserver6.arcgisonline.com/ArcGIS/rest/services/Elevation/ESRI_Elevation_World/GPServer/Viewshed/execute'

req = request.Request(URL, urlencode.urlencode(data).encode('UTF-8'))
response = urlopen.urlopen(req)
response_bytes = response.read()
data = json.loads(response_bytes.decode('UTF-8'))

# ------------------- 新增转换为DataFrame的代码 -------------------
# 提取可视区域的要素集合(定位到API返回的结果层级)
features = data['results'][0]['value']['features']

# 将每个要素的属性与几何信息整合为字典
feature_dicts = []
for feat in features:
    # 复制属性字典,避免修改原数据
    item = feat['attributes'].copy()
    # 把几何对象转为JSON字符串(方便在DataFrame中查看,也可保留原字典格式)
    item['geometry'] = json.dumps(feat['geometry'])
    feature_dicts.append(item)

# 转换为Pandas DataFrame,OBJECTID作为唯一标识列
df = pd.DataFrame(feature_dicts)

# 可选:按OBJECTID排序,让表格更规整
df = df.sort_values('OBJECTID').reset_index(drop=True)

# 查看结果
print(df.head())

关键步骤说明

  1. 定位要素数据:ArcGIS GP服务的execute接口返回的results数组中,第一个元素对应Viewshed工具的输出要素,其value.features就是所有可视区域的要素集合。
  2. 整合要素信息:每个要素包含attributes(含唯一OBJECTID)和geometry两部分,我们将两者合并为一个字典,几何信息转成JSON字符串是为了在DataFrame中更易读,若后续需要处理几何,也可以直接保留原字典格式。
  3. 生成DataFrame:直接用pd.DataFrame()将字典列表转换为表格,OBJECTID会自动成为其中一列,天然作为每条记录的唯一标识,你可以用它来做筛选、索引或关联操作。

简化写法(列表推导式)

如果觉得循环太繁琐,可以用列表推导式简化整合步骤:

feature_dicts = [
    {**feat['attributes'], 'geometry': json.dumps(feat['geometry'])}
    for feat in features
]

内容的提问来源于stack exchange,提问作者zape

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 08:45:49