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

调用native-land.ca的Polygon Overlap POST请求返回空列表求助

问题:Native Land API Polygon Overlap 请求返回空列表

尝试调用Native Land的Polygon Overlap接口(POST请求),但执行以下R代码后返回空列表,需排查问题:

library(sf)
library(geojsonsf)
library(httr)

# Create a polygon
lon = c(-114.88984, -114.05445)
lat = c(48.99889,49.46062)
poly_df = data.frame(lon, lat)

poly <- poly_df %>% 
  st_as_sf(coords = c("lon", "lat"), 
           crs = 4326) %>% 
  st_bbox() %>% 
  st_as_sfc()  %>%
  st_as_sf

poly$id=1:length(poly)

# Convert sf into geoJSON
geo <-  sf_geojson(poly)

# Set up POST request
body <- list(maps = "territories", polygon_geojson = geo)
url <- "https://native-land.ca/wp-json/nativeland/v1/api/index.php"
r <- POST(url, body = body)

# View request
content(r, "text") 

问题排查与修正

1. 请求体格式不匹配

httr::POST默认会把body编码为表单格式,但Native Land的API要求JSON格式请求体,这是导致空返回的核心原因。需用jsonlite::toJSON()转换请求体,并显式设置JSON内容类型。

2. 冗余字段干扰

代码中给多边形添加的id字段属于冗余信息,API不需要该字段,可删除。

3. GeoJSON转换优化

直接使用sf包原生的st_geojson()转换,能保证输出更符合标准的GeoJSON格式。

修正后的代码

library(sf)
library(httr)
library(jsonlite)

# 从两点生成矩形多边形
lon <- c(-114.88984, -114.05445)
lat <- c(48.99889, 49.46062)
poly_df <- data.frame(lon, lat)

poly <- poly_df %>% 
  st_as_sf(coords = c("lon", "lat"), crs = 4326) %>% 
  st_bbox() %>% 
  st_as_sfc() %>% 
  st_as_sf()

# 转换为标准GeoJSON字符串
geo <- st_geojson(poly)

# 构造JSON格式请求体
body <- list(
  maps = "territories",
  polygon_geojson = geo
)

# 发送POST请求
url <- "https://native-land.ca/wp-json/nativeland/v1/api/index.php"
r <- POST(
  url,
  body = toJSON(body, auto_unbox = TRUE),
  content_type_json()
)

# 查看返回结果
content(r, "text")

额外注意

  • 需确保你的多边形覆盖了存在原住民领地的区域,否则仍会返回空结果(可先在Native Land官网地图上验证该区域数据)。
  • 若仍有问题,可添加httr::verbose()查看请求详情,确认发送的GeoJSON格式是否完全符合API要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:20:32