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

如何使用Python获取非公开的ESRI Survey123表单数据

访问非公开ESRI Survey123调查数据的Python解决方案

问题背景

在未安装ArcGIS的设备上使用arcgis Python库时,仅能访问公开数据,无法获取非公开权限(非所有人可见)的Survey123调查结果。该调查为在线直接创建,未关联现有ESRI要素、图层等资源。

现有代码示例

from arcgis.gis import GIS

# ESRI Survey123 API端点
survey123_api_url = 'https://www.arcgis.com'
survey123_username = '<my_username>'
survey123_password = '<my_password>'

# 尝试获取非公开Survey123数据
survey_item_id = '88d7e11f82fa44c0a52db4ba435b86ff' # 示例ID
gis = GIS(survey123_api_url, survey123_username, survey123_password)

# 使用SurveyManager查看可用调查
survey_manager = arcgis.apps.survey123.SurveyManager(gis)
print(survey_manager.surveys) # 仅返回公开调查

# 尝试获取指定非公开调查
sbi = survey_manager.get(survey_item_id)
print(sbi) # 仅当调查公开时返回内容

# 搜索账户下内容
sr = gis.content.search('owner:<my account name>')
print(sr)   # 仅返回公开项目

解决步骤

1. 确认账户权限

确保使用的ArcGIS账户是调查的所有者,或已被授予调查的查看/编辑权限。若为团队协作调查,需联系管理员分配对应权限。

2. 调整搜索参数以包含非公开内容

默认搜索仅返回公开项目,需添加outside_org=False参数覆盖此行为:

# 搜索账户下所有Survey123表单(含非公开)
user_surveys = gis.content.search(
    'owner:<my account name>',
    item_type="Form",
    outside_org=False
)
# 将搜索结果转换为Survey对象
from arcgis.apps.survey123 import Survey
my_surveys = [Survey(gis, item.id) for item in user_surveys]
# 打印所有调查标题
print([s.title for s in my_surveys])

3. 直接访问调查的要素服务

每个Survey123调查都会自动生成对应的要素服务,通过要素服务可直接提取数据:

  1. 在Survey123网页端打开目标调查,进入数据标签页,获取要素服务ID(可通过"查看要素服务"入口查看)。
  2. 使用以下代码访问数据:
# 替换为你的要素服务ID
feature_service_id = "<调查对应的要素服务ID>"
# 获取要素服务
fs = gis.content.get(feature_service_id)
# 获取调查结果所在图层(通常为第一个图层)
results_layer = fs.layers[0]
# 查询所有记录(可添加where参数过滤数据)
all_records = results_layer.query()
# 输出数据
for feature in all_records.features:
    print(feature.attributes)

4. 验证认证有效性

确认当前登录账户为有权限的账户:

# 打印当前登录用户信息
print(f"当前登录账户:{gis.users.me.username}")
print(f"账户角色:{gis.users.me.role}")

内容的提问来源于Stack Exchange,提问作者ChrisSc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 12:35:31