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

如何将R中含坐标对多边形的geoJSON加载结果转为sf对象?

解决GeoJSON转sf对象的报错问题

jsonlite加载GeoJSON后生成的geometry列是普通数值矩阵/嵌套列表,并非sf包要求的简单要素几何类型,这就是st_as_sf报错的原因。需要先把坐标转换为sf认可的几何对象,再完成转换。

方法一:手动转换几何列

假设poly_shape$geometry的每个元素都是多边形坐标矩阵(注意:多边形坐标需首尾闭合,若未闭合需手动补充):

library(sf)
library(jsonlite)

# 逐个转换坐标为多边形几何对象
poly_geoms <- lapply(poly_shape$geometry, function(coords) {
  coords_mat <- as.matrix(coords)
  # 检查坐标是否闭合,未闭合则添加首行到末尾
  if (!all(coords_mat[1,] == coords_mat[nrow(coords_mat),])) {
    coords_mat <- rbind(coords_mat, coords_mat[1,])
  }
  # st_polygon要求输入为嵌套列表格式的矩阵
  st_polygon(list(coords_mat))
})

# 将几何对象打包为sf几何列,指定对应的坐标系(示例为WGS84,即EPSG:4326)
poly_shape$geometry <- st_sfc(poly_geoms, crs = 4326)

# 转换为sf对象
poly_sf <- st_as_sf(poly_shape)

方法二:直接用sf读取GeoJSON

无需通过jsonlite手动加载,sf原生支持GeoJSON文件读取,会自动处理几何类型:

library(sf)
# 直接读取GeoJSON文件,生成标准sf对象
poly_sf <- st_read("你的GeoJSON文件路径.geojson")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:00:10