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

httr2中URL查询.multi参数的使用方法咨询

解决httr2批量查询ArcGIS Feature Server多OBJECTID的问题

正确实现代码

核心是构造符合ArcGIS查询语法的WHERE子句,将多个OBJECTID用括号包裹、逗号分隔,无需误用.multi参数:

library(httr2)
library(glue)

all_the_ids <- list(objectIds = c(746, 3733, 2271, 2337, 3385, 3610, 2921, 1741, 1883, 885))
snes_url <- "https://services1.arcgis.com/gtRkYQyUQLMTM1uS/arcgis/rest/services/Australian_Species_of_National_Environmental_Significance_Distributions/FeatureServer/0/query"

# 生成格式正确的WHERE子句:OBJECTID IN (id1, id2, ...)
where_clause <- glue::glue("OBJECTID IN ({paste(all_the_ids$objectIds, collapse = ',')})")

full_query_params <- list(
  where = where_clause,
  outFields = "*",
  outSR = 4326,
  f = "json"
)

dat_req <- request(snes_url) |> 
  req_url_query(!!!full_query_params)

response <- dat_req |> req_perform()
response |> resp_body_json() |> str()

错误写法原因分析

  1. 第一种错误写法:
    glue("OBJECTID IN {all_the_ids$objectIds[1:3]}")会生成OBJECTID IN 746 3733 2271,缺少括号和逗号分隔,不符合SQL查询语法,ArcGIS服务器无法解析。
  2. 第二种错误写法:
    .multi="comma"是用来处理单个查询参数对应多个值的场景(比如将?color=red&color=blue转为?color=red,blue),但这里的需求是在where参数的SQL语句中包含多个ID,并非给OBJECTID参数传多值,属于参数用法误解。

补充说明

  • 若待查询的OBJECTID数量过多,需注意ArcGIS Feature Server的查询限制,部分服务器会限制IN子句的ID数量,超出时可拆分多次查询后合并结果。
  • 也可使用glue_collapse简化字符串构造:
    where_clause <- glue("OBJECTID IN ({glue_collapse(all_the_ids$objectIds, ',')})")
    

内容的提问来源于stack exchange,提问作者we need a Mat. Stat.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 05:59:53