[R-sig-Geo] Error in reading shape file with readOGR()

Loïc Dutrieux loic.dutrieux at conabio.gob.mx
Wed Feb 14 16:59:57 CET 2018



On 14/02/2018 04:11, Roger Bivand wrote:
> On Tue, 13 Feb 2018, Adam Fera wrote:
> 
>> 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.
> 
> 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.

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
> 
> Roger
> 
>>
>> 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
>>
>>
>



More information about the R-sig-Geo mailing list