1
votes

I'm getting an error reading this shape file in R using both readOGR and read_sf:

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

readOGR error:

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 error:

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

It opens fine in QGIS. I'm able to read other shapefiles fine with my R setup fine (generally using read_sf) and I've never seen this error before. This is the code I'm using:

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")

I've looked at all the "error reading a shapefile in R" questions, but can't find anything that sorts my issue out. I tried opening it up in QGIS and exporting as a geojson file and I got this error:

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


EDIT WITH SOLUTION: The problem turned out to be an issue with inconsistent projection data in the file. QGIS could handle it, but R couldn't. I was able to fix this by using st_transform to make it consistent:

madrid1970 <- read_sf("./Termino_1970.shp") %>% st_transform(4326)
1
To load a shape file, you must also have the .dbf file and the .shx file I suggest that you download these to the same directory and then try to load from a local fileG5W
Thanks, I should have mentioned, the .dbf, .cpg, .prj, .qpg, and .shx files are also in the 45.56.98.26/madrid-divisiones directory, so that's not the issue in this case.Megan Cytron

1 Answers

1
votes

With your code directly linking to the single .shp file, R {sf} cannot tell where the required files (.shx, .dbf, .prj) are located.

You can download these files to local disk:

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) 

If you need to download it directly, choose geojson.

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