调用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
相关产品推荐
相关产品推荐

