Skip to content

Error in reading shape file with readOGR()

3 messages · Adam Fera, Roger Bivand, Loïc Dutrieux

#
Hello, Amos,

I came across this posting because I had a similar problem using R for
mapping within GNU Emacs Org Mode on GNU/Linux.  I work on a research team
that uses a shared directory for data analysis.  This makes it imperative
to use relative pathnames so that everyone can use the exact same code, the
exact same way, and achieve the exact same result.  Unfortunately, the
readOGR function in the rgdal package does not allow the use of relative
pathnames in the dsn (data source name) argument.

To get around this, I use the setwd and getwd functions.  I use setwd to
set the working directory to the directory with the shapefile.  Then, I use
the getwd function as the dsn argument.  Since setwd() can handle relative
pathnames and getwd() prints the absolute pathname, this allows the user a
way around the dsn= argument requiring an absolute pathname.  This worked
for my research team and allowed us all to use the same code for mapping in
R.

My R code looks something like this:

## SET WORKING DIRECTORY TO BE UNIFORM
setwd("~/relative/path/to/file/nypp_15c/")

## IMPORT THE SHAPEFILE TO A SPATIAL DATA.FRAME
library(rgdal)
precincts.2015 <- readOGR(
    dsn=getwd(),
    layer="nypp")

I would like to thank all the R developers, in particular Professor Bivand,
for their extremely useful contributions in creating software for
geospatial data analysis.

I hope this helps,

Adam G. Fera
#
On Tue, 13 Feb 2018, Adam Fera wrote:

            
The underlying GDAL logic expects an expanded path. Until I can check that 
using path.expand() inside the functions at least for reading, perhaps 
writing, use it as dsn = path.expand("~/relative/path/to/file/nypp_15c/"). 
I'd be grateful for feedback on whether this works as well as setwd().
sf uses enc2utf8(normalizePath(dsn)), so you could try normalizePath() 
too - path.expand() handles ~ but not ../.. . readGDAL() handles relative 
paths OK and uses normalizePath() internally.

Roger

  
    
#
On 14/02/2018 04:11, Roger Bivand wrote:
If you're working with shapefiles you may have a look at
raster::shapefile(). It's a thin wrapper around read/writeOGR(), and I
think it solves this relative path "issue" by using normalizePath().
But please don't take it as an advice to use shapefiles; it's not, there
are much better formats out there ;)

Cheers,
Lo?c