如何将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
相关产品推荐
相关产品推荐

