如何将GeoJSON文件读取转换为R中的sf对象?
解决GeoJSON转sf对象的问题
1. 先正确获取GeoJSON文件内容
你提供的SharePoint链接是共享预览链接,无法被R直接读取。可以通过以下两种方式获取文件内容:
- 本地下载:打开链接手动下载GeoJSON文件到本地,记录好文件路径。
- 代码获取:用
httr包将共享链接转为直接下载链接并获取内容:library(httr) url <- "https://vustaff-my.sharepoint.com/:u:/g/personal/e5028514_vu_edu_au/ERKzUBrFobBKrNe7ga-3arMB63ZuyD4eDbAtPQ5fzy2BbQ?e=m87Af9" download_url <- sub("\\?e=.*", "&download=1", url) response <- GET(download_url) geojson_content <- content(response, "text")
2. 读取为sf对象
使用sf包的st_read函数,这是最稳定的方式:
- 如果是本地文件:
library(sf) sf_obj <- st_read("你的本地文件路径/文件名.geojson") - 如果是通过代码获取的内容:
sf_obj <- st_read(textConnection(geojson_content))
之前st_read报错是因为你没提供有效的文件路径/内容,确保dsn参数不为空即可。
3. 提取sf几何对象
获取sf对象后,直接用st_geometry()提取几何部分:
geom_col <- st_geometry(sf_obj)
额外排查方案
如果geojsonsf报错"Invalid JSON",可以先验证GeoJSON格式是否合法:
library(jsonlite) # 检查JSON有效性 is_valid <- validate(geojson_content) if (!is_valid) { cat("JSON格式错误位置:", validate(geojson_content, error = TRUE)) }
另外,geojsonR的设计目标就是将GeoJSON解析为列表结构,不适合直接转sf,无需继续使用它。
内容的提问来源于stack exchange,提问作者m45ha
相关产品推荐
相关产品推荐

