Exercise in grImport

[This article was first published on R snippets, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Last week I used grImport for the first time. I decided to try perform another exercise using it. The task was to add voivodeship division of Poland.

Standard R maps do not contain such a division. I have found it on r-forge in package  mapoland based on ESRI shape files, but I wanted to import such a map from SVG file which can be found on Wikipedia. As last time SVG file has to be converted do PS first. Here is a comparison of both maps showing that the import worked quite well.


And this is the code I have used:

library(grImport)
PostScriptTrace(“Wojewodztwa.ps”)
voiv <- readPicture(“Wojewodztwa.ps.xml”)
broken.voiv <- explodePaths(voiv)

#extracting voivodeship ‘PictureStrokes’
xpath <- ypath <- list()
sel <- c(2,4,6,8,20,22,24,28,30,32,34,36,38,41,44,46)
for (i in seq(along = sel)) {
      xpath[[i]] <- broken.voiv[[sel[i]]]@paths$path@x
      ypath[[i]] <- broken.voiv[[sel[i]]]@paths$path@y
}
#adding Wolin island to zachodniopomorskie
xpath[[2]] <- c(broken.voiv[10]@paths$path@x[c(39:1, 95:40)],
                xpath[[2]])
ypath[[2]] <- c(broken.voiv[10]@paths$path@y[c(39:1, 95:40)],
                ypath[[2]])

library(mapoland)
pl <- getShape(“voiv”)

#functions rescaling paths to mapoland map size
transx <- function(x) {
      old <- c(min(sapply(xpath,min)), max(sapply(xpath,max)))
      new <- pl@bbox[1,]
      ((x old[1]) / (old[2] – old[1])) * (new[2] new[1])
    + new[1]
}

transy <- function(y) {
      old <- c(min(sapply(ypath, min)), max(sapply(ypath, max)))
      new <- pl@bbox[2,]
      ((y old[1]) / (old[2] – old[1])) * (new[2] new[1])
    + new[1]
}

plot(pl, lwd = 4)
for (i in seq(along = sel)) {
      lines(transx(xpath[[i]]), transy(ypath[[i]]), col = “red”)
}

To leave a comment for the author, please follow the link and comment on their blog: R snippets.

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.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)