在 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)
我在使用 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)