在 QGIS 中正常工作的 R 中读取 shapefile 时出错

error reading shapefile in R that works fine in QGIS

我在使用 readOGR 和 read_sf 在 R 中读取此形状文件时遇到错误:

http://45.56.98.26/madrid-divisiones/Termino_1612.shp

readOGR 错误:

Warning in ogrFIDs(dsn = dsn, layer = layer) : no features found
Error in readOGR(dsn = "http://45.56.98.26/madrid-divisiones/Termino_1612.shp") : 
  no features found

read_sf 错误:

Warning in CPL_read_ogr(dsn, layer, query, as.character(options), quiet,  :
  GDAL Error 1: JSON parsing error: continue (at offset 0)

它在 QGIS 中打开很好。我可以通过我的 R 设置正常读取其他 shapefile(通常使用 read_sf),而且我以前从未见过此错误。这是我正在使用的代码:

madrid1612 <- read_sf("http://45.56.98.26/madrid-divisiones/Termino_1612.shp",quiet=TRUE,as_tibble = FALSE,stringsAsFactors = TRUE)

madrid1612 <- readOGR(dsn="http://45.56.98.26/madrid-divisiones/Termino_1612.shp")

我查看了所有 "error reading a shapefile in R" 问题,但找不到任何可以解决我的问题的问题。我尝试在 QGIS 中打开它并导出为 geojson 文件,但出现此错误:

madrid1612<-fromJSON(txt ="http://45.56.98.26/madrid-divisiones/Termino_1612.geojson")

Warning: Error in polygonData.default: Don't know how to get path data from object of class list


使用解决方案进行编辑:问题原来是文件中投影数据不一致的问题。 QGIS 可以处理它,但 R 不能。我能够通过使用 st_transform 使其保持一致来解决此问题:

madrid1970 <- read_sf("./Termino_1970.shp") %>% st_transform(4326)

如果您的代码直接链接到单个 .shp 文件,R {sf} 无法判断所需文件 (.shx, .dbf, .prj) 的位置。

您可以将这些文件下载到本地磁盘:

library(sf)

library(downloader)

loc = "http://45.56.98.26/madrid-divisiones/"
shape_name = "Termino_1612"
ext_name = c(".shp", ".shx", ".dbf", ".prj")

i=1
for (i in 1:4){
  download(paste0(loc, shape_name, ext_name[i]), 
           destfile= paste0("./", shape_name, ext_name[i]), mode = "wb")
  i = i +1
} 

madrid1612 <- read_sf("./Termino_1612.shp")
plot(madrid1612) 

如需直接下载,请选择geojson

madrid1612 <- read_sf("http://45.56.98.26/madrid-divisiones/Termino_1612.geojson")
plot(madrid1612)