Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
This post is a follow up from my latest Things I Forget post on reading in shapefiles. That post assumed that you already had access to all the relevant files (e.g. .shp, .shx, .prj, .dbf, etc.). A task that I routinely need to do is locate shapefiles on a website, grab those files, and read them in. Instead of having to do this manually I wrote a function a while back to take care of this task. The function simply requires shape_url
, a link to the location of the files, and layer
, the name of the shapefile. Currently the layer
should not contain the .shp extension. There is also an optional parameter outfile
that can be used to create a different name for the downloaded files.
I haven’t spent much time on error handling. For instance this function assumes you already have rgdal
and sp
installed and loaded. If you try to use this and get an error, let me know in the comments and I’ll try to fix it. Or better yet suggest a change and I’ll throw it in!
So here is the function.
download.shapefile<-function(shape_url,layer,outfile=layer) { #written by: jw hollister #Oct 10, 2012 #set-up/clean-up variables if(length(grep("/$",shape_url))==0) { shape_url<-paste(shape_url,"/",sep="") } #creates vector of all possible shapefile extensions shapefile_ext<-c(".shp",".shx",".dbf",".prj",".sbn",".sbx", ".shp.xml",".fbn",".fbx",".ain",".aih",".ixs", ".mxs",".atx",".cpg") #Check which shapefile files exist if(require(RCurl)) { xurl<-getURL(shape_url) xlogic<-NULL for(i in paste(layer,shapefile_ext,sep="")) { xlogic<-c(xlogic,grepl(i,xurl)) } #Set-up list of shapefiles to download shapefiles<-paste(shape_url,layer,shapefile_ext,sep="")[xlogic] #Set-up output file names outfiles<-paste(outfile,shapefile_ext,sep="")[xlogic] } #Download all shapefiles if(sum(xlogic)>0) { for(i in 1:length(shapefiles)) { download.file(shapefiles[i],outfiles[i], method="auto",mode="wb") } } else { stop("An Error has occured with the input URL or name of shapefile") } }
And now to prove it works I can do something like the following:
#Download the NH State Boundaries download.shapefile("ftp://ftp.granit.sr.unh.edu/pub/GRANIT_Data/Vector_Data/Administrative_and_Political_Boundaries/d-nhsenatedists/2012", "NHSenateDists2012") #Read shapefiles in SpatialPolygonsDataFrame NHBnd<-readOGR(".","NHSenateDists2012") #Plot it plot(NHBnd)
Lastly, there are some other approaches for tackling related problems listed below.
Related articles
- Batch Downloading Zipped Shapefiles with R (r-bloggers.com)
- Loading Multiple Shapefiles to the R-Console Simultaneously (r-bloggers.com)
claimtoken-5249c78db4c7a
Filed under: Landscape Ecology, Programming, R Tagged: download, GIS, R, shapefiles
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.