Full Code of Pakillo/R-GIS-tutorial for AI

master b644534f7b94 cached
6 files
2.6 MB
693.5k tokens
1 requests
Download .txt
Showing preview only (2,774K chars total). Download the full file or copy to clipboard to get everything.
Repository: Pakillo/R-GIS-tutorial
Branch: master
Commit: b644534f7b94
Files: 6
Total size: 2.6 MB

Directory structure:
gitextract_iwufr4h5/

├── .gitattributes
├── .gitignore
├── R-GIS_tutorial.Rmd
├── R-GIS_tutorial.md
├── README.md
└── index.html

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
*.html linguist-detectable=false
*.Rmd linguist-language=R


================================================
FILE: .gitignore
================================================
.Rproj.user
.Rhistory
.RData
36.1.-5.65.png
36.1.-5.65.png.rda
53.086.-2.31.png
53.086.-2.31.png.rda
ESP2_msk_alt.grd
ESP2_msk_alt.gri
ESP2_msk_alt.vrt
ESP_msk_alt.grd
ESP_msk_alt.gri
ESP_msk_alt.vrt
France.gfw
France.gif
France.prj
G_2013-02-25_185157_55492.kmz
R-GIS tutorial.Rproj
R-GIS_tutorial.html
README.html
gmap.png
gmap.png.rda
locsgb.dbf
locsgb.kml
locsgb.shp
locsgb.shx
newmap.png
newmap.png.rda
newmap2.png
newmap2.png.rda
newmap3.png
newmap3.png.rda
tmin.all.grd
tmin.all.gri
tmin1.c.grd
tmin1.c.gri
tmin1.kmz
wc10
BES_MacroEcology_SpatialRFlyer.jpg
G_2013-12-18_150958_77388.kmz
G_2013-12-19_012141_82937.kmz
G_2013-12-19_123019_21910.kmz


================================================
FILE: R-GIS_tutorial.Rmd
================================================

Spatial data in R: Using R as a GIS     
========================================================


A tutorial to perform basic operations with spatial data in R, such as importing and exporting data (both vectorial and raster), plotting, analysing and making maps.


[Francisco Rodriguez-Sanchez](http://sites.google.com/site/rodriguezsanchezf) 


v 2.2  

27-01-2015 

Licence: [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/)


Check out code and latest version at [GitHub](https://github.com/Pakillo/R-GIS-tutorial/blob/master/R-GIS_tutorial.md)



<br>
<br>
<br>

CONTENTS <a name="contents"></a>
=========

<br>
<br>

[1. INTRODUCTION](#intro)
<br>
<br>


[2. GENERIC MAPPING](#mapping)
<br>
  
  * [Retrieving base maps from Google with `gmap` function in package `dismo`](#gmap)
  
  * [`RgoogleMaps`: Map your data onto Google Map tiles](#rgooglemaps)
  
  * [`googleVis`: visualise data in a web browser using Google Visualisation API](#googlevis)
  
  * [`RWorldMap`: mapping global data](#rworldmap)
<br>
<br>


[3. SPATIAL VECTOR DATA (points, lines, polygons)](#vector)
<br>

  * [Example dataset: retrieve point occurrence data from GBIF](#gbif)
  
  * [Making data 'spatial'](#spatial)
  
  * [Define spatial projection](#projection)
  
  * [Quickly plotting point data on a map](#plot)
  
  * [Subsetting and mapping again](#subset)
  
  * [Mapping vectorial data (points, polygons, polylines)](#mapvector)
  
  * [Drawing polygons and polylines (e.g. for digitising)](#digitise)
  
  * [Converting between formats, reading in, and saving spatial vector data](#iovec)
  
  * [Changing projection of spatial vector data](#changeproj)
<br>
<br>
  
  
[4. USING RASTER (GRID) DATA](#raster)
<br>

  * [Downloading raster climate data from internet](#getdata)
  
  * [Loading a raster layer](#loadraster)
  
  * [Creating a raster stack](#rasterstack)
  
  * [Raster bricks](#rasterbrick)
  
  * [Crop rasters](#cropraster)
  
  * [Define spatial projection of the rasters](#projectionraster)
  
  * [Changing projection](#changeprojraster)
  
  * [Plotting raster data](#plotraster)
  
  * [Spatial autocorrelation](#autocorrelation)
  
  * [Extract values from raster](#extract)
  
  * [Rasterize vector data (points, lines or polygons)](#rasterize)
  
  * [Changing raster resolution](#resolution)
  
  * [Spline interpolation](#interpolation)
  
  * [Setting all rasters to the same extent, projection and resolution all in one](#spatialsync)
  
  * [Elevations, slope, aspect, etc](#elevation)
  
  * [Saving and exporting raster data](#saveraster)
<br>
<br>




[5. SPATIAL STATISTICS](#spatstats)
<br>

  * [Point pattern analysis](#pointpatterns)
  
  * [Geostatistics](#geostatistics)
<br> 
<br>

  
  
[6. INTERACTING WITH OTHER GIS](#othergis)
<br>
<br>

[7. OTHER USEFUL PACKAGES](#otherpackages)
<br>
<br>

[8. TO LEARN MORE](#tolearnmore)


<br>
<br>
<br>
<br>





1. INTRODUCTION <a name="intro"></a>
===============

<br>

R is great not only for doing statistics, but also for many other tasks, including GIS analysis and working with spatial data. For instance, R is capable of doing wonderful maps such as [this](http://spatialanalysis.co.uk/wp-content/uploads/2012/02/bike_ggplot.png) or [this](http://oscarperpinan.github.io/spacetime-vis/images/airMadrid_stamen.png). In this tutorial I will show some basic GIS functionality in R.



#### Basic packages

```{r message=FALSE}

library(sp)         # classes for spatial data
library(raster)     # grids, rasters
library(rasterVis)  # raster visualisation
library(maptools)   
library(rgeos)
    # and their dependencies
```

There are many other useful packages, e.g. check [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html). Some of them will be used below.

<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>


     
2. GENERIC MAPPING <a name="mapping"></a>
==================

<br>


Retrieving base maps from Google with `gmap` function in package `dismo` <a name="gmap"></a>
------------------------------------------------------------------------

Some examples:

Getting maps for countries:

```{r gmap1, message=FALSE}

library(dismo)
  
mymap <- gmap("France")   # choose whatever country
plot(mymap)
```

Choose map type:
```{r gmap2, message=FALSE}
mymap <- gmap("France", type="satellite")  
plot(mymap)
```

Choose zoom level:
```{r gmap3, message=FALSE}
mymap <- gmap("France", type="satellite", exp=3)
plot(mymap)
```

Save the map as a file in your working directory for future use
```{r message=FALSE}
mymap <- gmap("France", type="satellite", filename="France.gmap")    
```


Now get a map for a region drawn at hand

```{r eval=FALSE}

mymap <- gmap("Europe")
plot(mymap)

select.area <- drawExtent()   
# now click 2 times on the map to select your region
mymap <- gmap(select.area)
plot(mymap)
# See ?gmap for many other possibilities
```



<br>
<br>








`RgoogleMaps`: Map your data onto Google Map tiles <a name="rgooglemaps"></a>
------------------------------------------------

```{r message=FALSE, results='hide'}
library(RgoogleMaps) 
```


Get base maps from Google (a file will be saved in your working directory)
```{r message=FALSE, results='hide'}
newmap <- GetMap(center=c(36.7,-5.9), zoom =10, destfile = "newmap.png", maptype = "satellite")   

# Now using bounding box instead of center coordinates:
newmap2 <- GetMap.bbox(lonR=c(-5, -6), latR=c(36, 37), destfile = "newmap2.png", maptype="terrain")   

# Try different maptypes
newmap3 <- GetMap.bbox(lonR=c(-5, -6), latR=c(36, 37), destfile = "newmap3.png", maptype="satellite")
```


Now plot data onto these maps, e.g. these 3 points
```{r}
PlotOnStaticMap(lat = c(36.3, 35.8, 36.4), lon = c(-5.5, -5.6, -5.8), zoom= 10, 
                cex=4, pch= 19, col="red", FUN = points, add=F)

```






<br>
<br>





`googleVis`: visualise data in a web browser using Google Visualisation API <a name="googlevis"></a>
---------------------------------------------------------------------------

```{r message=FALSE}
library(googleVis) 
```

Run `demo(googleVis)` to see all the possibilities


```{r setOptions, echo=FALSE}
op <- options(gvis.plot.tag = "chart")  
# necessary so that googleVis works with knitr, see http://lamages.blogspot.co.uk/2012/10/googlevis-032-is-released-better.html
```

<br>

### Example: plot country-level data
```{r results='asis', tidy=FALSE, eval=TRUE}
data(Exports)    # a simple data frame
Geo <- gvisGeoMap(Exports, locationvar="Country", numvar="Profit", 
                  options=list(height=400, dataMode='regions'))
plot(Geo)
```
Using `print(Geo)` we can get the HTML code to embed the map in a web page!

<br>

### Example: Plotting point data onto a google map (internet)
```{r results='asis', tidy=FALSE, eval=TRUE}
data(Andrew)
M1 <- gvisMap(Andrew, "LatLong", "Tip", 
              options=list(showTip=TRUE, showLine=F, enableScrollWheel=TRUE, 
                           mapType='satellite', useMapTypeControl=TRUE, width=800,height=400))
plot(M1)
```


  
    
<br>
<br>





`RWorldMap`: mapping global data <a name="rworldmap"></a>
--------------------------------

Some examples

```{r message=FALSE, warning=FALSE}

library(rworldmap)

newmap <- getMap(resolution="coarse")    # different resolutions available
plot(newmap)
```

```{r message=FALSE} 
mapCountryData()
```
```{r message=FALSE}
mapCountryData(mapRegion="europe")
```
```{r message=FALSE}
mapGriddedData()
```
```{r message=FALSE}
mapGriddedData(mapRegion="europe")
  
```




<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>
<br>
    






  
   


3. SPATIAL VECTOR DATA (points, lines, polygons) <a name="vector"></a>
================================================

<br>
<br>

### Example dataset: retrieve point occurrence data from GBIF <a name="gbif"></a>

Let's create an example dataset: retrieve occurrence data 
for the laurel tree (Laurus nobilis) from the 
[Global Biodiversity Information Facility (GBIF)](http://gbif.org)
```{r message=FALSE}
library(dismo)      # check also the nice "rgbif" package! 
laurus <- gbif("Laurus", "nobilis")      
# get data frame with spatial coordinates (points)
locs <- subset(laurus, select=c("country", "lat", "lon"))
head(locs)    # a simple data frame with coordinates

# Discard data with errors in coordinates:
locs <- subset(locs, locs$lat<90)
```

<br>

### Making data 'spatial' <a name="spatial"></a>

So we have got a simple dataframe containing spatial coordinates. 
Let's make these data explicitly *spatial*
```{r}
coordinates(locs) <- c("lon", "lat")    # set spatial coordinates
plot(locs)
```


### Define spatial projection <a name="projection"></a>

Important: define geographical projection. 
Consult the appropriate PROJ.4 description here: 
[http://www.spatialreference.org/](http://www.spatialreference.org/)
```{r}
crs.geo <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")    # geographical, datum WGS84
proj4string(locs) <- crs.geo     # define projection system of our data
summary(locs)
```

<br>

### Quickly plotting point data on a map <a name="plot"></a>
```{r}
plot(locs, pch=20, col="steelblue")
library(rworldmap)
# library rworldmap provides different types of global maps, e.g:
data(coastsCoarse) 
data(countriesLow)
plot(coastsCoarse, add=T)
```


### Subsetting and mapping again <a name="subset"></a>
```{r}
table(locs$country)     # see localities of Laurus nobilis by country

locs.gb <- subset(locs, locs$country=="United Kingdom")    # select only locs in UK
plot(locs.gb, pch=20, cex=2, col="steelblue")
title("Laurus nobilis occurrences in UK")
plot(countriesLow, add=T)
summary(locs.gb)

```


<br>

Mapping vectorial data (points, polygons, polylines) <a name="mapvector"></a>
---------------------------------------------------------------------

<br>

### Mapping vectorial data using `gmap` from `dismo`


```{r}
gbmap <- gmap(locs.gb, type="satellite")
locs.gb.merc <- Mercator(locs.gb)    # Google Maps are in Mercator projection. 
  # This function projects the points to that projection to enable mapping
plot(gbmap)
points(locs.gb.merc, pch=20, col="red")
```





<br>

### Mapping vectorial data with `RgoogleMaps` 


```{r message=FALSE}

require(RgoogleMaps)

locs.gb.coords <- as.data.frame(coordinates(locs.gb))    # retrieves coordinates 
  # (1st column for longitude, 2nd column for latitude)
PlotOnStaticMap(lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, 
                zoom= 5, cex=1.4, pch= 19, col="red", FUN = points, add=F)
```

Download base map from Google Maps and plot onto it
```{r message=FALSE}
map.lim <- qbbox (locs.gb.coords$lat, locs.gb.coords$lon, TYPE="all")    # define region 
  # of interest (bounding box)
mymap <- GetMap.bbox(map.lim$lonR, map.lim$latR, destfile = "gmap.png", maptype="satellite")
# see the file in the wd
PlotOnStaticMap(mymap, lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, 
                zoom= NULL, cex=1.3, pch= 19, col="red", FUN = points, add=F)
```

<br>
<br>

Using different background (base map)
```{r message=FALSE}
mymap <- GetMap.bbox(map.lim$lonR, map.lim$latR, destfile = "gmap.png", maptype="hybrid")
PlotOnStaticMap(mymap, lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, 
                zoom= NULL, cex=1.3, pch= 19, col="red", FUN = points, add=F)

```








<br>
<br>

### Map vectorial data with `googleVis` (internet) 


```{r results='asis', tidy=FALSE, eval=TRUE}
points.gb <- as.data.frame(locs.gb)
points.gb$latlon <- paste(points.gb$lat, points.gb$lon, sep=":")
map.gb <- gvisMap(points.gb, locationvar="latlon", tipvar="country", 
                  options = list(showTip=T, showLine=F, enableScrollWheel=TRUE,
                           useMapTypeControl=T, width=1400,height=800))
plot(map.gb)
#print(map.gb)    # get HTML suitable for a webpage
```




<br>
<br>
<br>

### Drawing polygons and polylines (e.g. for digitising) <a name="digitise"></a>


```{r eval=FALSE}
plot(gbmap)
mypolygon <- drawPoly()    # click on the map to draw a polygon and press ESC when finished
summary(mypolygon)    # now you have a spatial polygon! Easy, isn't it?
```


<br>
<br>
<br>
<br>

Converting between formats, reading in, and saving spatial vector data <a name="iovec"></a>
-------------------------------------------------------------------

<br>

### Exporting KML (Google Earth)
```{r}
writeOGR(locs.gb, dsn="locsgb.kml", layer="locs.gb", driver="KML")
```

### Reading KML
```{r}
newmap <- readOGR("locsgb.kml", layer="locs.gb")
```

### Save as shapefile
```{r}
writePointsShape(locs.gb, "locsgb")
```

### Reading shapefiles
```{r}
gb.shape <- readShapePoints("locsgb.shp")
plot(gb.shape)
```
Use `readShapePoly` to read polygon shapefiles, and `readShapeLines` to read polylines.
See also `shapefile` in `raster` package.   



<br>
<br>
<br>

Changing projection of spatial vector data <a name="changeproj"></a>
-------------------------------------------

`spTransform` (package `sp`) will do the projection as long as the original and new projection are correctly specified.

<br>

### Projecting point dataset

To illustrate, let's project the dataframe with Laurus nobilis coordinates that we obtained above:
```{r}
summary(locs)
```
The original coordinates are in lat lon format. Let's define the new desired projection:
Lambert Azimuthal Equal Area in this case 
(look up parameters at [http://spatialreference.org](http://spatialreference.org))
```{r}
crs.laea <- CRS("+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs") # Lambert Azimuthal Equal Area
locs.laea <- spTransform(locs, crs.laea)    # spTransform makes the projection
```

<br>

### Projecting shapefile of countries
```{r}
plot(countriesLow)    # countries map in geographical projection
country.laea <- spTransform(countriesLow, crs.laea)  # project
```

Let's plot this:
```{r}
plot(locs.laea, pch=20, col="steelblue")
plot(country.laea, add=T)

# define spatial limits for plotting
plot(locs.laea, pch=20, col="steelblue", xlim=c(1800000, 3900000), ylim=c(1000000, 3000000))
plot(country.laea, add=T)
```




<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>
<br>
<br>







4. USING RASTER (GRID) DATA <a name="raster"></a>
===========================


<br>

### Downloading raster climate data from internet <a name="getdata"></a>
The `getData` function from the `dismo` package will easily retrieve climate data, elevation, administrative boundaries, etc. Check also the excellent [rWBclimate package](http://ropensci.org/packages/rwbclimate.html) by rOpenSci with additional functionality. 

```{r}
tmin <- getData("worldclim", var="tmin", res=10)   # this will download 
  # global data on minimum temperature at 10' resolution
```

<br>

### Loading a raster layer <a name="loadraster"></a>

```{r}
tmin1 <- raster(paste(getwd(), "/wc10/tmin1.bil", sep=""))   # Tmin for January
```
Easy! The `raster` function reads many different formats, including Arc ASCII grids or netcdf files (see raster help). And values are stored on disk instead of memory! (useful for large rasters) 
```{r}
fromDisk(tmin1)
```

Let's examine the raster layer:
```{r}
tmin1 <- tmin1/10    # Worldclim temperature data come in decimal degrees 
tmin1    # look at the info
plot(tmin1)
```

<br>

### Creating a raster stack <a name="rasterstack"></a>

A raster stack is collection of many raster layers with the same projection, spatial extent and resolution.
Let's collect several raster files from disk and read them as a single raster stack:

```{r message=FALSE, warning=FALSE}

library(gtools)
file.remove(paste(getwd(), "/wc10/", "tmin_10m_bil.zip", sep=""))
list.ras <- mixedsort(list.files(paste(getwd(), "/wc10/", sep=""), full.names=T, pattern=".bil"))
list.ras   # I have just collected a list of the files containing monthly temperature values
tmin.all <- stack(list.ras)
tmin.all
tmin.all <- tmin.all/10
plot(tmin.all)
```


<br>

### Raster bricks <a name="rasterbrick"></a>

A rasterbrick is similar to a raster stack (i.e. multiple layers with the same extent and resolution), but all the data must be stored in a single file on disk.

```{r}
tmin.brick <- brick(tmin.all)   # creates rasterbrick
```

<br>

### Crop rasters <a name="cropraster"></a>

Crop raster manually (drawing region of interest):

```{r eval=FALSE}
plot(tmin1)
newext <- drawExtent()    # click twice on the map to select the region of interest
tmin1.c <- crop(tmin1, newext)
plot(tmin1.c)
```

Alternatively, provide coordinates for the limits of the region of interest:
```{r}
newext <- c(-10, 10, 30, 50)   
tmin1.c <- crop(tmin1, newext)
plot(tmin1.c)

tmin.all.c <- crop(tmin.all, newext)
plot(tmin.all.c)
```

<br>

### Define spatial projection of the rasters <a name="projectionraster"></a>

```{r}
crs.geo    # defined above
projection(tmin1.c) <- crs.geo
projection(tmin.all.c) <- crs.geo
tmin1.c    # notice info at coord.ref.
```

<br>

### Changing projection <a name="changeprojraster"></a>

Use `projectRaster` function:
```{r}
tmin1.proj <- projectRaster(tmin1.c, crs="+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +no_defs")   # can also use a template raster, see ?projectRaster
tmin1.proj   # notice info at coord.ref.
plot(tmin1.proj)
```


<br>

### Plotting raster data <a name="plotraster"></a>

Different plotting functions:
```{r}
histogram(tmin1.c)
pairs(tmin.all.c)
persp(tmin1.c)
contour(tmin1.c)
contourplot(tmin1.c)
levelplot(tmin1.c)
#plot3D(tmin1.c)
bwplot(tmin.all.c)
densityplot(tmin1.c)
```


### Spatial autocorrelation <a name="autocorrelation"></a>

```{r}
Moran(tmin1.c)    # global Moran's I
tmin1.Moran <- MoranLocal(tmin1.c)
plot(tmin1.Moran)
```


### Extract values from raster <a name="extract"></a>

Use `extract` function:
```{r}
head(locs)    # we'll obtain tmin values for our points
projection(tmin1) <- crs.geo
locs$tmin1 <- extract(tmin1, locs)    # raster values 
  # are incorporated to the dataframe
head(locs)
```

You can also extract values for a given region instead of the whole raster:
```{r eval=FALSE}
plot(tmin1.c)
reg.clim <- extract(tmin1.c, drawExtent())  # click twice to 
  # draw extent of the region of interest 
summary(reg.clim)
```

Using `rasterToPoints`:
```{r}
# rasterToPoints
tminvals <- rasterToPoints(tmin1.c)
head(tminvals)
```

And also, the `click` function will get values from particular locations in the map
```{r eval=FALSE}
plot(tmin1.c)
click(tmin1.c, n=3)   # click n times in the map to get values
```

<br>

### Rasterize points, lines or polygons <a name="rasterize"></a>

```{r}
locs2ras <- rasterize(locs.gb, tmin1, field=rep(1,nrow(locs.gb)))
locs2ras
plot(locs2ras, xlim=c(-10,10), ylim=c(45, 60), legend=F)
data(wrld_simpl)
plot(wrld_simpl, add=T)
```


<br>

### Changing raster resolution <a name="resolution"></a>

Use `aggregate` function:
```{r}
tmin1.lowres <- aggregate(tmin1.c, fact=2, fun=mean)
tmin1.lowres
tmin1.c     # compare
par(mfcol=c(1,2))
plot(tmin1.c, main="original")
plot(tmin1.lowres, main="low resolution")
```


### Spline interpolation <a name="interpolation"></a>

```{r message=FALSE, warning=FALSE}
xy <- data.frame(xyFromCell(tmin1.lowres, 1:ncell(tmin1.lowres)))    # get raster cell coordinates
head(xy)
vals <- getValues(tmin1.lowres)
library(fields)
spline <- Tps(xy, vals)    # thin plate spline
intras <- interpolate(tmin1.c, spline)
intras    # note new resolution
plot(intras)  
intras <- mask(intras, tmin1.c)   # mask to land areas only
plot(intras)
title("Interpolated raster")
```

### Setting all rasters to the same extent, projection and resolution all in one <a name="spatialsync"></a>

See `spatial_sync_raster` function from `spatial.tools` package.

<br>


### Elevations, slope, aspect, etc <a name="elevation"></a>

<br>
Download elevation data from internet:
```{r}
elevation <- getData('alt', country='ESP')
```

Some quick maps:
```{r}
x <- terrain(elevation, opt=c('slope', 'aspect'), unit='degrees')
plot(x)

slope <- terrain(elevation, opt='slope')
aspect <- terrain(elevation, opt='aspect')
hill <- hillShade(slope, aspect, 40, 270)
plot(hill, col=grey(0:100/100), legend=FALSE, main='Spain')
plot(elevation, col=rainbow(25, alpha=0.35), add=TRUE)
```


### Saving and exporting raster data <a name="saveraster"></a>


Saving raster to file:

```{r}
writeRaster(tmin1.c, filename="tmin1.c.grd")   
writeRaster(tmin.all.c, filename="tmin.all.grd")
```
`writeRaster` can export to many different file types, see help.

<br>

Exporting to KML (Google Earth)
```{r}
tmin1.c <- raster(tmin.all.c, 1)
KML(tmin1.c, file="tmin1.kml")  
KML(tmin.all.c)     # can export multiple layers

```

<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

5. SPATIAL STATISTICS (just a glance) <a name="spatstats"></a>
=====================================

<br>

### Point pattern analysis <a name="pointpatterns"></a>

Some useful packages:

```{r message=FALSE}
library(spatial)
library(spatstat)
library(spatgraphs)
library(ecespa)    # ecological focus
```
See [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html).

Let's do a quick example with Ripley's K function:
```{r}
data(fig1)
plot(fig1)    # point pattern
data(Helianthemum)
cosa12 <- K1K2(Helianthemum, j="deadpl", i="survpl", r=seq(0,200,le=201),
               nsim=99, nrank=1, correction="isotropic")
plot(cosa12$k1k2, lty=c(2, 1, 2), col=c(2, 1, 2), xlim=c(0, 200),
     main= "survival- death",ylab=expression(K[1]-K[2]), legend=FALSE)

```

<br>

### Geostatistics <a name="geostatistics"></a>

Some useful packages:

```{r message=FALSE, eval=FALSE}
library(gstat)
library(geoR)
library(akima)   # for spline interpolation
library(spdep)   # dealing with spatial dependence
```
See [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html).


<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

6. INTERACTING WITH OTHER GIS <a name="othergis"></a>
===============================================

```{r message=F, eval=F}
library(spgrass6)   # GRASS
library(RPyGeo)     # ArcGis (Python)
library(RSAGA)      # SAGA
library(spsextante) # Sextante 

```

<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>


7. OTHER USEFUL PACKAGES <a name="otherpackages"></a>
=========================

```{r message=FALSE, eval=FALSE}
library(Metadata)    # automatically collates data from online GIS datasets (land cover, pop density, etc) for a given set of coordinates

#library(GeoXp)    # Interactive exploratory spatial data analysis
example(columbus)
histomap(columbus,"CRIME")

library(maptools)
# readGPS 

library(rangeMapper)    # plotting species distributions, richness and traits


# Species Distribution Modelling
library(dismo)
library(biomod2)
library(SDMTools)

library(BioCalc)   # computes 19 bioclimatic variables from monthly climatic values (tmin, tmax, prec)

```

<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

8. TO LEARN MORE <a name="tolearnmore"></a>
================

* [ASDAR book](http://www.asdar-book.org/)

* Packages help and vignettes, especially

    http://cran.r-project.org/web/packages/raster/vignettes/Raster.pdf   
    http://cran.r-project.org/web/packages/dismo/vignettes/sdm.pdf   
    http://cran.r-project.org/web/packages/sp/vignettes/sp.pdf   

* [CRAN Task View: Analysis of Spatial Data](http://cran.r-project.org/web/views/Spatial.html)


* [Introduction to Spatial Data and ggplot2](http://rpubs.com/RobinLovelace/intro-spatial)

* [R spatial tips](http://spatial.ly/category/r-spatial-data-hints/)

* [R wiki: tips for spatial data](http://rwiki.sciviews.org/doku.php?id=tips:spatial-data&s=spatial)

* [Spatial analysis in R](http://www.maths.lancs.ac.uk/~rowlings/Teaching/Sheffield2013/index.html)

* [Displaying time series, spatial and space-time data with R](http://oscarperpinan.github.io/spacetime-vis/)

* [Notes on Spatial Data Operations in R](https://dl.dropboxusercontent.com/u/9577903/broomspatial.pdf)

* [Analysing spatial point patterns in R](http://www.csiro.au/resources/pf16h)

* [Spatial data in R](http://science.nature.nps.gov/im/datamgmt/statistics/r/advanced/Spatial.cfm)

* [NCEAS Geospatial use cases](http://www.nceas.ucsb.edu/scicomp/usecases)

* [Spatial Analyst](http://spatial-analyst.net)

* [Making maps with R](http://www.molecularecologist.com/2012/09/making-maps-with-r/)

* [The Visual Raster Cheat Sheet](http://www.rpubs.com/etiennebr/visualraster)

* [R-SIG-Geo mailing list](https://stat.ethz.ch/mailman/listinfo/R-SIG-Geo)

* [Geospatial data processing and analysis in R (slides)](http://rpubs.com/ajlyons/rspatialdata)

* [rMaps](http://rmaps.github.io/)





<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

================================================
FILE: R-GIS_tutorial.md
================================================

Spatial data in R: Using R as a GIS     
========================================================


A tutorial to perform basic operations with spatial data in R, such as importing and exporting data (both vectorial and raster), plotting, analysing and making maps.


[Francisco Rodriguez-Sanchez](http://sites.google.com/site/rodriguezsanchezf) 


v 2.2  

27-01-2015 

Licence: [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/)


Check out code and latest version at [GitHub](https://github.com/Pakillo/R-GIS-tutorial/blob/master/R-GIS_tutorial.md)



<br>
<br>
<br>

CONTENTS <a name="contents"></a>
=========

<br>
<br>

[1. INTRODUCTION](#intro)
<br>
<br>


[2. GENERIC MAPPING](#mapping)
<br>
  
  * [Retrieving base maps from Google with `gmap` function in package `dismo`](#gmap)
  
  * [`RgoogleMaps`: Map your data onto Google Map tiles](#rgooglemaps)
  
  * [`googleVis`: visualise data in a web browser using Google Visualisation API](#googlevis)
  
  * [`RWorldMap`: mapping global data](#rworldmap)
<br>
<br>


[3. SPATIAL VECTOR DATA (points, lines, polygons)](#vector)
<br>

  * [Example dataset: retrieve point occurrence data from GBIF](#gbif)
  
  * [Making data 'spatial'](#spatial)
  
  * [Define spatial projection](#projection)
  
  * [Quickly plotting point data on a map](#plot)
  
  * [Subsetting and mapping again](#subset)
  
  * [Mapping vectorial data (points, polygons, polylines)](#mapvector)
  
  * [Drawing polygons and polylines (e.g. for digitising)](#digitise)
  
  * [Converting between formats, reading in, and saving spatial vector data](#iovec)
  
  * [Changing projection of spatial vector data](#changeproj)
<br>
<br>
  
  
[4. USING RASTER (GRID) DATA](#raster)
<br>

  * [Downloading raster climate data from internet](#getdata)
  
  * [Loading a raster layer](#loadraster)
  
  * [Creating a raster stack](#rasterstack)
  
  * [Raster bricks](#rasterbrick)
  
  * [Crop rasters](#cropraster)
  
  * [Define spatial projection of the rasters](#projectionraster)
  
  * [Changing projection](#changeprojraster)
  
  * [Plotting raster data](#plotraster)
  
  * [Spatial autocorrelation](#autocorrelation)
  
  * [Extract values from raster](#extract)
  
  * [Rasterize vector data (points, lines or polygons)](#rasterize)
  
  * [Changing raster resolution](#resolution)
  
  * [Spline interpolation](#interpolation)
  
  * [Setting all rasters to the same extent, projection and resolution all in one](#spatialsync)
  
  * [Elevations, slope, aspect, etc](#elevation)
  
  * [Saving and exporting raster data](#saveraster)
<br>
<br>




[5. SPATIAL STATISTICS](#spatstats)
<br>

  * [Point pattern analysis](#pointpatterns)
  
  * [Geostatistics](#geostatistics)
<br> 
<br>

  
  
[6. INTERACTING WITH OTHER GIS](#othergis)
<br>
<br>

[7. OTHER USEFUL PACKAGES](#otherpackages)
<br>
<br>

[8. TO LEARN MORE](#tolearnmore)


<br>
<br>
<br>
<br>





1. INTRODUCTION <a name="intro"></a>
===============

<br>

R is great not only for doing statistics, but also for many other tasks, including GIS analysis and working with spatial data. For instance, R is capable of doing wonderful maps such as [this](http://spatialanalysis.co.uk/wp-content/uploads/2012/02/bike_ggplot.png) or [this](http://oscarperpinan.github.io/spacetime-vis/images/airMadrid_stamen.png). In this tutorial I will show some basic GIS functionality in R.



#### Basic packages


```r

library(sp)  # classes for spatial data
library(raster)  # grids, rasters
library(rasterVis)  # raster visualisation
library(maptools)
library(rgeos)
# and their dependencies
```


There are many other useful packages, e.g. check [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html). Some of them will be used below.

<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>


     
2. GENERIC MAPPING <a name="mapping"></a>
==================

<br>


Retrieving base maps from Google with `gmap` function in package `dismo` <a name="gmap"></a>
------------------------------------------------------------------------

Some examples:

Getting maps for countries:


```r

library(dismo)

mymap <- gmap("France")  # choose whatever country
plot(mymap)
```

![plot of chunk gmap1](figure/gmap11.png) ![plot of chunk gmap1](figure/gmap12.png) 


Choose map type:

```r
mymap <- gmap("France", type = "satellite")
plot(mymap)
```

![plot of chunk gmap2](figure/gmap21.png) ![plot of chunk gmap2](figure/gmap22.png) 


Choose zoom level:

```r
mymap <- gmap("France", type = "satellite", exp = 3)
plot(mymap)
```

![plot of chunk gmap3](figure/gmap31.png) ![plot of chunk gmap3](figure/gmap32.png) 


Save the map as a file in your working directory for future use

```r
mymap <- gmap("France", type = "satellite", filename = "France.gmap")
```



Now get a map for a region drawn at hand


```r

mymap <- gmap("Europe")
plot(mymap)

select.area <- drawExtent()
# now click 2 times on the map to select your region
mymap <- gmap(select.area)
plot(mymap)
# See ?gmap for many other possibilities
```




<br>
<br>








`RgoogleMaps`: Map your data onto Google Map tiles <a name="rgooglemaps"></a>
------------------------------------------------


```r
library(RgoogleMaps)
```



Get base maps from Google (a file will be saved in your working directory)

```r
newmap <- GetMap(center = c(36.7, -5.9), zoom = 10, destfile = "newmap.png", 
    maptype = "satellite")

# Now using bounding box instead of center coordinates:
newmap2 <- GetMap.bbox(lonR = c(-5, -6), latR = c(36, 37), destfile = "newmap2.png", 
    maptype = "terrain")

# Try different maptypes
newmap3 <- GetMap.bbox(lonR = c(-5, -6), latR = c(36, 37), destfile = "newmap3.png", 
    maptype = "satellite")
```



Now plot data onto these maps, e.g. these 3 points

```r
PlotOnStaticMap(lat = c(36.3, 35.8, 36.4), lon = c(-5.5, -5.6, -5.8), zoom = 10, 
    cex = 4, pch = 19, col = "red", FUN = points, add = F)
```

![plot of chunk unnamed-chunk-6](figure/unnamed-chunk-6.png) 







<br>
<br>





`googleVis`: visualise data in a web browser using Google Visualisation API <a name="googlevis"></a>
---------------------------------------------------------------------------


```r
library(googleVis)
```


Run `demo(googleVis)` to see all the possibilities





<br>

### Example: plot country-level data

```r
data(Exports)    # a simple data frame
Geo <- gvisGeoMap(Exports, locationvar="Country", numvar="Profit", 
                  options=list(height=400, dataMode='regions'))
plot(Geo)
```

<!-- GeoMap generated in R 3.0.2 by googleVis 0.4.7 package -->
<!-- Thu Dec 19 12:27:31 2013 -->


<!-- jsHeader -->
<script type="text/javascript">
 
// jsData 
function gvisDataGeoMapIDb083e32714a () {
var data = new google.visualization.DataTable();
var datajson =
[
 [
 "Germany",
3 
],
[
 "Brazil",
4 
],
[
 "United States",
5 
],
[
 "France",
4 
],
[
 "Hungary",
3 
],
[
 "India",
2 
],
[
 "Iceland",
1 
],
[
 "Norway",
4 
],
[
 "Spain",
5 
],
[
 "Turkey",
1 
] 
];
data.addColumn('string','Country');
data.addColumn('number','Profit');
data.addRows(datajson);
return(data);
}
 
// jsDrawChart
function drawChartGeoMapIDb083e32714a() {
var data = gvisDataGeoMapIDb083e32714a();
var options = {};
options["dataMode"] = "regions";
options["width"] =    556;
options["height"] =    400;

    var chart = new google.visualization.GeoMap(
    document.getElementById('GeoMapIDb083e32714a')
    );
    chart.draw(data,options);
    

}
  
 
// jsDisplayChart
(function() {
var pkgs = window.__gvisPackages = window.__gvisPackages || [];
var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
var chartid = "geomap";
  
// Manually see if chartid is in pkgs (not all browsers support Array.indexOf)
var i, newPackage = true;
for (i = 0; newPackage && i < pkgs.length; i++) {
if (pkgs[i] === chartid)
newPackage = false;
}
if (newPackage)
  pkgs.push(chartid);
  
// Add the drawChart function to the global list of callbacks
callbacks.push(drawChartGeoMapIDb083e32714a);
})();
function displayChartGeoMapIDb083e32714a() {
  var pkgs = window.__gvisPackages = window.__gvisPackages || [];
  var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
  window.clearTimeout(window.__gvisLoad);
  // The timeout is set to 100 because otherwise the container div we are
  // targeting might not be part of the document yet
  window.__gvisLoad = setTimeout(function() {
  var pkgCount = pkgs.length;
  google.load("visualization", "1", { packages:pkgs, callback: function() {
  if (pkgCount != pkgs.length) {
  // Race condition where another setTimeout call snuck in after us; if
  // that call added a package, we must not shift its callback
  return;
}
while (callbacks.length > 0)
callbacks.shift()();
} });
}, 100);
}
 
// jsFooter
</script>
 
<!-- jsChart -->  
<script type="text/javascript" src="https://www.google.com/jsapi?callback=displayChartGeoMapIDb083e32714a"></script>
 
<!-- divChart -->
  
<div id="GeoMapIDb083e32714a"
  style="width: 556px; height: 400px;">
</div>

Using `print(Geo)` we can get the HTML code to embed the map in a web page!

<br>

### Example: Plotting point data onto a google map (internet)

```r
data(Andrew)
M1 <- gvisMap(Andrew, "LatLong", "Tip", 
              options=list(showTip=TRUE, showLine=F, enableScrollWheel=TRUE, 
                           mapType='satellite', useMapTypeControl=TRUE, width=800,height=400))
plot(M1)
```

<!-- Map generated in R 3.0.2 by googleVis 0.4.7 package -->
<!-- Thu Dec 19 12:27:31 2013 -->


<!-- jsHeader -->
<script type="text/javascript">
 
// jsData 
function gvisDataMapIDb08491aa1 () {
var data = new google.visualization.DataTable();
var datajson =
[
 [
 10.8,
-35.5,
"Tropical Depression<BR>Pressure=1010<BR>Speed=25" 
],
[
 11.2,
-37.4,
"Tropical Depression<BR>Pressure=1009<BR>Speed=30" 
],
[
 11.7,
-39.6,
"Tropical Depression<BR>Pressure=1008<BR>Speed=30" 
],
[
 12.3,
-42,
"Tropical Storm<BR>Pressure=1006<BR>Speed=35" 
],
[
 13.1,
-44.2,
"Tropical Storm<BR>Pressure=1003<BR>Speed=35" 
],
[
 13.6,
-46.2,
"Tropical Storm<BR>Pressure=1002<BR>Speed=40" 
],
[
 14.1,
-48,
"Tropical Storm<BR>Pressure=1001<BR>Speed=45" 
],
[
 14.6,
-49.9,
"Tropical Storm<BR>Pressure=1000<BR>Speed=45" 
],
[
 15.4,
-51.8,
"Tropical Storm<BR>Pressure=1000<BR>Speed=45" 
],
[
 16.3,
-53.5,
"Tropical Storm<BR>Pressure=1001<BR>Speed=45" 
],
[
 17.2,
-55.3,
"Tropical Storm<BR>Pressure=1002<BR>Speed=45" 
],
[
 18,
-56.9,
"Tropical Storm<BR>Pressure=1005<BR>Speed=45" 
],
[
 18.8,
-58.3,
"Tropical Storm<BR>Pressure=1007<BR>Speed=45" 
],
[
 19.8,
-59.3,
"Tropical Storm<BR>Pressure=1011<BR>Speed=40" 
],
[
 20.7,
-60,
"Tropical Storm<BR>Pressure=1013<BR>Speed=40" 
],
[
 21.7,
-60.7,
"Tropical Storm<BR>Pressure=1015<BR>Speed=40" 
],
[
 22.5,
-61.5,
"Tropical Storm<BR>Pressure=1014<BR>Speed=40" 
],
[
 23.2,
-62.4,
"Tropical Storm<BR>Pressure=1014<BR>Speed=45" 
],
[
 23.9,
-63.3,
"Tropical Storm<BR>Pressure=1010<BR>Speed=45" 
],
[
 24.4,
-64.2,
"Tropical Storm<BR>Pressure=1007<BR>Speed=50" 
],
[
 24.8,
-64.9,
"Tropical Storm<BR>Pressure=1004<BR>Speed=50" 
],
[
 25.3,
-65.9,
"Tropical Storm<BR>Pressure=1000<BR>Speed=55" 
],
[
 25.6,
-67,
"Tropical Storm<BR>Pressure=994<BR>Speed=60" 
],
[
 25.8,
-68.3,
"Hurricane<BR>Pressure=981<BR>Speed=70" 
],
[
 25.7,
-69.7,
"Hurricane<BR>Pressure=969<BR>Speed=80" 
],
[
 25.6,
-71.1,
"Hurricane<BR>Pressure=961<BR>Speed=90" 
],
[
 25.5,
-72.5,
"Hurricane<BR>Pressure=947<BR>Speed=105" 
],
[
 25.4,
-74.2,
"Hurricane<BR>Pressure=933<BR>Speed=120" 
],
[
 25.4,
-75.8,
"Hurricane<BR>Pressure=922<BR>Speed=135" 
],
[
 25.4,
-77.5,
"Hurricane<BR>Pressure=930<BR>Speed=125" 
],
[
 25.4,
-79.3,
"Hurricane<BR>Pressure=937<BR>Speed=120" 
],
[
 25.6,
-81.2,
"Hurricane<BR>Pressure=951<BR>Speed=110" 
],
[
 25.8,
-83.1,
"Hurricane<BR>Pressure=947<BR>Speed=115" 
],
[
 26.2,
-85,
"Hurricane<BR>Pressure=943<BR>Speed=115" 
],
[
 26.6,
-86.7,
"Hurricane<BR>Pressure=948<BR>Speed=115" 
],
[
 27.2,
-88.2,
"Hurricane<BR>Pressure=946<BR>Speed=115" 
],
[
 27.8,
-89.6,
"Hurricane<BR>Pressure=941<BR>Speed=120" 
],
[
 28.5,
-90.5,
"Hurricane<BR>Pressure=937<BR>Speed=120" 
],
[
 29.2,
-91.3,
"Hurricane<BR>Pressure=955<BR>Speed=115" 
],
[
 30.1,
-91.7,
"Tropical Storm<BR>Pressure=973<BR>Speed=80" 
],
[
 30.9,
-91.6,
"Tropical Storm<BR>Pressure=991<BR>Speed=50" 
],
[
 31.5,
-91.1,
"Tropical Depression<BR>Pressure=995<BR>Speed=35" 
],
[
 32.1,
-90.5,
"Tropical Depression<BR>Pressure=997<BR>Speed=30" 
],
[
 32.8,
-89.6,
"Tropical Depression<BR>Pressure=998<BR>Speed=30" 
],
[
 33.6,
-88.4,
"Tropical Depression<BR>Pressure=999<BR>Speed=25" 
],
[
 34.4,
-86.7,
"Tropical Depression<BR>Pressure=1000<BR>Speed=20" 
],
[
 35.4,
-84,
"Tropical Depression<BR>Pressure=1000<BR>Speed=20" 
] 
];
data.addColumn('number','Latitude');
data.addColumn('number','Longitude');
data.addColumn('string','Tip');
data.addRows(datajson);
return(data);
}
 
// jsDrawChart
function drawChartMapIDb08491aa1() {
var data = gvisDataMapIDb08491aa1();
var options = {};
options["showTip"] = true;
options["showLine"] = false;
options["enableScrollWheel"] = true;
options["mapType"] = "satellite";
options["useMapTypeControl"] = true;
options["width"] =    800;
options["height"] =    400;

    var chart = new google.visualization.Map(
    document.getElementById('MapIDb08491aa1')
    );
    chart.draw(data,options);
    

}
  
 
// jsDisplayChart
(function() {
var pkgs = window.__gvisPackages = window.__gvisPackages || [];
var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
var chartid = "map";
  
// Manually see if chartid is in pkgs (not all browsers support Array.indexOf)
var i, newPackage = true;
for (i = 0; newPackage && i < pkgs.length; i++) {
if (pkgs[i] === chartid)
newPackage = false;
}
if (newPackage)
  pkgs.push(chartid);
  
// Add the drawChart function to the global list of callbacks
callbacks.push(drawChartMapIDb08491aa1);
})();
function displayChartMapIDb08491aa1() {
  var pkgs = window.__gvisPackages = window.__gvisPackages || [];
  var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
  window.clearTimeout(window.__gvisLoad);
  // The timeout is set to 100 because otherwise the container div we are
  // targeting might not be part of the document yet
  window.__gvisLoad = setTimeout(function() {
  var pkgCount = pkgs.length;
  google.load("visualization", "1", { packages:pkgs, callback: function() {
  if (pkgCount != pkgs.length) {
  // Race condition where another setTimeout call snuck in after us; if
  // that call added a package, we must not shift its callback
  return;
}
while (callbacks.length > 0)
callbacks.shift()();
} });
}, 100);
}
 
// jsFooter
</script>
 
<!-- jsChart -->  
<script type="text/javascript" src="https://www.google.com/jsapi?callback=displayChartMapIDb08491aa1"></script>
 
<!-- divChart -->
  
<div id="MapIDb08491aa1"
  style="width: 800px; height: 400px;">
</div>



  
    
<br>
<br>





`RWorldMap`: mapping global data <a name="rworldmap"></a>
--------------------------------

Some examples


```r

library(rworldmap)

newmap <- getMap(resolution = "coarse")  # different resolutions available
plot(newmap)
```

![plot of chunk unnamed-chunk-10](figure/unnamed-chunk-10.png) 



```r
mapCountryData()
```

![plot of chunk unnamed-chunk-11](figure/unnamed-chunk-11.png) 


```r
mapCountryData(mapRegion = "europe")
```

![plot of chunk unnamed-chunk-12](figure/unnamed-chunk-12.png) 


```r
mapGriddedData()
```

![plot of chunk unnamed-chunk-13](figure/unnamed-chunk-13.png) 


```r
mapGriddedData(mapRegion = "europe")
```

![plot of chunk unnamed-chunk-14](figure/unnamed-chunk-14.png) 





<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>
<br>
    






  
   


3. SPATIAL VECTOR DATA (points, lines, polygons) <a name="vector"></a>
================================================

<br>
<br>

### Example dataset: retrieve point occurrence data from GBIF <a name="gbif"></a>

Let's create an example dataset: retrieve occurrence data 
for the laurel tree (Laurus nobilis) from the 
[Global Biodiversity Information Facility (GBIF)](http://gbif.org)

```r
library(dismo)  # check also the nice 'rgbif' package! 
laurus <- gbif("Laurus", "nobilis")
```

```
## Laurus nobilis : 2120 occurrences found
## 1-1000-2000-2120
```

```r
# get data frame with spatial coordinates (points)
locs <- subset(laurus, select = c("country", "lat", "lon"))
head(locs)  # a simple data frame with coordinates
```

```
##   country   lat    lon
## 1   Spain 36.12 -5.579
## 2   Spain 38.26 -5.207
## 3   Spain 36.11 -5.534
## 4   Spain 36.87 -5.312
## 5   Spain 37.30 -1.918
## 6   Spain 36.10 -5.545
```

```r

# Discard data with errors in coordinates:
locs <- subset(locs, locs$lat < 90)
```


<br>

### Making data 'spatial' <a name="spatial"></a>

So we have got a simple dataframe containing spatial coordinates. 
Let's make these data explicitly *spatial*

```r
coordinates(locs) <- c("lon", "lat")  # set spatial coordinates
plot(locs)
```

![plot of chunk unnamed-chunk-16](figure/unnamed-chunk-16.png) 



### Define spatial projection <a name="projection"></a>

Important: define geographical projection. 
Consult the appropriate PROJ.4 description here: 
[http://www.spatialreference.org/](http://www.spatialreference.org/)

```r
crs.geo <- CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")  # geographical, datum WGS84
proj4string(locs) <- crs.geo  # define projection system of our data
summary(locs)
```

```
## Object of class SpatialPointsDataFrame
## Coordinates:
##         min    max
## lon -123.25 145.04
## lat  -37.78  59.84
## Is projected: FALSE 
## proj4string :
## [+proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0]
## Number of points: 2109
## Data attributes:
##    Length     Class      Mode 
##      2109 character character
```


<br>

### Quickly plotting point data on a map <a name="plot"></a>

```r
plot(locs, pch = 20, col = "steelblue")
library(rworldmap)
# library rworldmap provides different types of global maps, e.g:
data(coastsCoarse)
data(countriesLow)
plot(coastsCoarse, add = T)
```

![plot of chunk unnamed-chunk-18](figure/unnamed-chunk-18.png) 



### Subsetting and mapping again <a name="subset"></a>

```r
table(locs$country)  # see localities of Laurus nobilis by country
```

```
## 
##      Australia         Canada        Croatia         France        Germany 
##              2              1              1              1              1 
##         Greece        Ireland         Israel          Italy          Spain 
##              5             69           1231              2            206 
##         Sweden United Kingdom  United States 
##              2            578             10
```

```r

locs.gb <- subset(locs, locs$country == "United Kingdom")  # select only locs in UK
plot(locs.gb, pch = 20, cex = 2, col = "steelblue")
title("Laurus nobilis occurrences in UK")
plot(countriesLow, add = T)
```

![plot of chunk unnamed-chunk-19](figure/unnamed-chunk-19.png) 

```r
summary(locs.gb)
```

```
## Object of class SpatialPointsDataFrame
## Coordinates:
##        min    max
## lon -6.392  1.772
## lat 49.951 56.221
## Is projected: FALSE 
## proj4string :
## [+proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0]
## Number of points: 578
## Data attributes:
##    Length     Class      Mode 
##       578 character character
```



<br>

Mapping vectorial data (points, polygons, polylines) <a name="mapvector"></a>
---------------------------------------------------------------------

<br>

### Mapping vectorial data using `gmap` from `dismo`



```r
gbmap <- gmap(locs.gb, type = "satellite")
locs.gb.merc <- Mercator(locs.gb)  # Google Maps are in Mercator projection. 
# This function projects the points to that projection to enable mapping
plot(gbmap)
```

![plot of chunk unnamed-chunk-20](figure/unnamed-chunk-201.png) 

```r
points(locs.gb.merc, pch = 20, col = "red")
```

![plot of chunk unnamed-chunk-20](figure/unnamed-chunk-202.png) 






<br>

### Mapping vectorial data with `RgoogleMaps` 



```r

require(RgoogleMaps)

locs.gb.coords <- as.data.frame(coordinates(locs.gb))  # retrieves coordinates 
# (1st column for longitude, 2nd column for latitude)
PlotOnStaticMap(lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, zoom = 5, 
    cex = 1.4, pch = 19, col = "red", FUN = points, add = F)
```

![plot of chunk unnamed-chunk-21](figure/unnamed-chunk-21.png) 


Download base map from Google Maps and plot onto it

```r
map.lim <- qbbox(locs.gb.coords$lat, locs.gb.coords$lon, TYPE = "all")  # define region 
# of interest (bounding box)
mymap <- GetMap.bbox(map.lim$lonR, map.lim$latR, destfile = "gmap.png", maptype = "satellite")
```

```
## [1] "http://maps.google.com/maps/api/staticmap?center=53.086237,-2.30987445&zoom=6&size=640x640&maptype=satellite&format=png32&sensor=true"
```

```r
# see the file in the wd
PlotOnStaticMap(mymap, lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, zoom = NULL, 
    cex = 1.3, pch = 19, col = "red", FUN = points, add = F)
```

![plot of chunk unnamed-chunk-22](figure/unnamed-chunk-22.png) 


<br>
<br>

Using different background (base map)

```r
mymap <- GetMap.bbox(map.lim$lonR, map.lim$latR, destfile = "gmap.png", maptype = "hybrid")
```

```
## [1] "http://maps.google.com/maps/api/staticmap?center=53.086237,-2.30987445&zoom=6&size=640x640&maptype=hybrid&format=png32&sensor=true"
```

```r
PlotOnStaticMap(mymap, lat = locs.gb.coords$lat, lon = locs.gb.coords$lon, zoom = NULL, 
    cex = 1.3, pch = 19, col = "red", FUN = points, add = F)
```

![plot of chunk unnamed-chunk-23](figure/unnamed-chunk-23.png) 









<br>
<br>

### Map vectorial data with `googleVis` (internet) 



```r
points.gb <- as.data.frame(locs.gb)
points.gb$latlon <- paste(points.gb$lat, points.gb$lon, sep=":")
map.gb <- gvisMap(points.gb, locationvar="latlon", tipvar="country", 
                  options = list(showTip=T, showLine=F, enableScrollWheel=TRUE,
                           useMapTypeControl=T, width=1400,height=800))
plot(map.gb)
```

<!-- Map generated in R 3.0.2 by googleVis 0.4.7 package -->
<!-- Thu Dec 19 12:28:17 2013 -->


<!-- jsHeader -->
<script type="text/javascript">
 
// jsData 
function gvisDataMapIDb085424efa () {
var data = new google.visualization.DataTable();
var datajson =
[
 [
 53.798363,
-0.25377846,
"United Kingdom" 
],
[
 53.800476,
-0.40555596,
"United Kingdom" 
],
[
 53.41154,
-2.9779854,
"United Kingdom" 
],
[
 53.412884,
-2.7974555,
"United Kingdom" 
],
[
 53.430862,
-2.797792,
"United Kingdom" 
],
[
 53.412884,
-2.7974555,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 50.66046,
-1.0802728,
"United Kingdom" 
],
[
 51.287277,
-0.7809699,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 50.257538,
-5.297342,
"United Kingdom" 
],
[
 50.66046,
-1.0802728,
"United Kingdom" 
],
[
 51.967426,
1.2758358,
"United Kingdom" 
],
[
 50.175335,
-5.011484,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 52.962803,
1.0527366,
"United Kingdom" 
],
[
 51.46179,
-0.34441733,
"United Kingdom" 
],
[
 52.672245,
1.7722985,
"United Kingdom" 
],
[
 50.752285,
-1.3620236,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 51.28868,
-3.0756438,
"United Kingdom" 
],
[
 51.651524,
-2.6505208,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 50.752285,
-1.3620236,
"United Kingdom" 
],
[
 50.66149,
-1.2217541,
"United Kingdom" 
],
[
 52.06857,
0.8453797,
"United Kingdom" 
],
[
 50.75039,
-2.9214883,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.66149,
-1.2217541,
"United Kingdom" 
],
[
 50.175335,
-5.011484,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 50.293114,
-3.6146727,
"United Kingdom" 
],
[
 52.4974,
1.6098989,
"United Kingdom" 
],
[
 51.18774,
-0.06802027,
"United Kingdom" 
],
[
 52.440582,
0.2806388,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 54.25755,
-2.8443713,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.84135,
-2.781234,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.84135,
-1.218766,
"United Kingdom" 
],
[
 50.84135,
-1.218766,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 52.40767,
1.6025597,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.96329,
1.4211539,
"United Kingdom" 
],
[
 50.752285,
-1.3620236,
"United Kingdom" 
],
[
 50.069702,
-5.5640182,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 50.65634,
-3.344112,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 53.376064,
-2.9170372,
"United Kingdom" 
],
[
 53.376293,
-2.8869743,
"United Kingdom" 
],
[
 52.55246,
-1.926249,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 51.74144,
-1.3481886,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.069702,
-5.5640182,
"United Kingdom" 
],
[
 50.933704,
-1.7865157,
"United Kingdom" 
],
[
 50.75039,
-2.9214883,
"United Kingdom" 
],
[
 51.561604,
-2.6492372,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.652733,
-3.6269717,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 54.618816,
-2.5420728,
"United Kingdom" 
],
[
 52.012802,
-2.2185814,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 50.751423,
-2.7797363,
"United Kingdom" 
],
[
 50.463715,
-4.1841645,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.383022,
-3.6177242,
"United Kingdom" 
],
[
 53.24907,
-4.323423,
"United Kingdom" 
],
[
 51.20192,
-2.6441677,
"United Kingdom" 
],
[
 51.892365,
-4.6888576,
"United Kingdom" 
],
[
 51.742153,
-1.4930286,
"United Kingdom" 
],
[
 50.257538,
-5.297342,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 51.547245,
-3.947173,
"United Kingdom" 
],
[
 54.326843,
-4.383782,
"United Kingdom" 
],
[
 50.2721,
-4.7368417,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 51.289913,
-2.9322464,
"United Kingdom" 
],
[
 50.84135,
-2.781234,
"United Kingdom" 
],
[
 50.650673,
-3.7683785,
"United Kingdom" 
],
[
 50.753834,
-1.7873349,
"United Kingdom" 
],
[
 50.933704,
-2.2134843,
"United Kingdom" 
],
[
 50.2721,
-4.7368417,
"United Kingdom" 
],
[
 50.65634,
-3.344112,
"United Kingdom" 
],
[
 51.097862,
-0.07176985,
"United Kingdom" 
],
[
 52.641262,
-2.5173035,
"United Kingdom" 
],
[
 50.663555,
-2.353762,
"United Kingdom" 
],
[
 50.753834,
-2.212665,
"United Kingdom" 
],
[
 51.3719,
-0.3476622,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.365032,
0.08310807,
"United Kingdom" 
],
[
 51.996586,
-3.9666135,
"United Kingdom" 
],
[
 51.18774,
-0.06802027,
"United Kingdom" 
],
[
 51.46179,
-3.6555827,
"United Kingdom" 
],
[
 50.84377,
-1.7869264,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 50.932144,
-1.3595661,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.201176,
-3.7517123,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.07794,
-5.2849946,
"United Kingdom" 
],
[
 51.46179,
-3.6555827,
"United Kingdom" 
],
[
 50.37639,
-4.039484,
"United Kingdom" 
],
[
 52.816986,
-3.112988,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 50.66407,
-2.070753,
"United Kingdom" 
],
[
 51.721813,
-4.2442775,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 51.46179,
-3.6555827,
"United Kingdom" 
],
[
 50.57413,
-1.9293817,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 50.84135,
-1.218766,
"United Kingdom" 
],
[
 50.38489,
-3.4771044,
"United Kingdom" 
],
[
 50.56283,
-3.6238735,
"United Kingdom" 
],
[
 50.47088,
-3.7616613,
"United Kingdom" 
],
[
 51.112694,
-2.500053,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.931274,
-1.2172604,
"United Kingdom" 
],
[
 50.371117,
-4.320562,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 52.10109,
-1.3429587,
"United Kingdom" 
],
[
 51.631958,
0.23983838,
"United Kingdom" 
],
[
 50.66407,
-2.070753,
"United Kingdom" 
],
[
 50.175335,
-5.011484,
"United Kingdom" 
],
[
 51.192116,
-0.35410187,
"United Kingdom" 
],
[
 51.369785,
-0.20405345,
"United Kingdom" 
],
[
 50.662354,
-2.6367571,
"United Kingdom" 
],
[
 50.75349,
-2.3544395,
"United Kingdom" 
],
[
 51.463734,
-0.4883246,
"United Kingdom" 
],
[
 50.752285,
-1.3620236,
"United Kingdom" 
],
[
 50.753834,
-1.7873349,
"United Kingdom" 
],
[
 51.287277,
-0.7809699,
"United Kingdom" 
],
[
 50.463715,
-4.1841645,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 56.221188,
-4.016121,
"United Kingdom" 
],
[
 51.823296,
-0.4763173,
"United Kingdom" 
],
[
 51.452248,
0.23102868,
"United Kingdom" 
],
[
 52.672245,
1.7722985,
"United Kingdom" 
],
[
 50.83772,
-3.2072785,
"United Kingdom" 
],
[
 51.46179,
-0.34441733,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.474804,
-3.4799051,
"United Kingdom" 
],
[
 50.64844,
-3.9097683,
"United Kingdom" 
],
[
 50.468662,
-3.9025145,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.92434,
-3.494124,
"United Kingdom" 
],
[
 50.081814,
-5.145436,
"United Kingdom" 
],
[
 50.66304,
-2.495262,
"United Kingdom" 
],
[
 51.192116,
-0.35410187,
"United Kingdom" 
],
[
 50.84135,
-2.781234,
"United Kingdom" 
],
[
 50.564713,
-3.48272,
"United Kingdom" 
],
[
 50.751423,
-2.7797363,
"United Kingdom" 
],
[
 51.547245,
-3.947173,
"United Kingdom" 
],
[
 53.24285,
-4.622895,
"United Kingdom" 
],
[
 50.37877,
-3.8989153,
"United Kingdom" 
],
[
 50.257538,
-5.297342,
"United Kingdom" 
],
[
 54.137306,
-4.8322535,
"United Kingdom" 
],
[
 52.4031,
1.7492679,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.359573,
0.3701853,
"United Kingdom" 
],
[
 50.933876,
-1.9288384,
"United Kingdom" 
],
[
 50.361942,
-4.742008,
"United Kingdom" 
],
[
 50.38098,
-3.7583282,
"United Kingdom" 
],
[
 52.01118,
-1.3442764,
"United Kingdom" 
],
[
 50.74453,
-3.4883928,
"United Kingdom" 
],
[
 51.901516,
-4.253226,
"United Kingdom" 
],
[
 51.380886,
-2.7903848,
"United Kingdom" 
],
[
 51.365032,
0.08310807,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.832535,
-0.366784,
"United Kingdom" 
],
[
 51.892365,
-4.6888576,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 50.069702,
-5.5640182,
"United Kingdom" 
],
[
 50.834435,
-0.50874895,
"United Kingdom" 
],
[
 53.349102,
-3.7278032,
"United Kingdom" 
],
[
 51.383,
-2.3592803,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 52.10272,
-2.2190206,
"United Kingdom" 
],
[
 52.865036,
1.3431085,
"United Kingdom" 
],
[
 51.005547,
0.066959515,
"United Kingdom" 
],
[
 50.933704,
-2.2134843,
"United Kingdom" 
],
[
 51.459667,
-0.20052691,
"United Kingdom" 
],
[
 51.3756,
-3.3650715,
"United Kingdom" 
],
[
 50.754005,
-2.0708885,
"United Kingdom" 
],
[
 50.29108,
-3.7550118,
"United Kingdom" 
],
[
 51.192116,
-3.645898,
"United Kingdom" 
],
[
 49.951286,
-6.3920474,
"United Kingdom" 
],
[
 51.3719,
-0.3476622,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 50.265156,
-5.0171494,
"United Kingdom" 
],
[
 50.65462,
-3.485549,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 50.66149,
-2.778246,
"United Kingdom" 
],
[
 50.466274,
-4.0433493,
"United Kingdom" 
],
[
 51.473278,
-2.2159932,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.558414,
-3.0819952,
"United Kingdom" 
],
[
 51.556995,
-3.2262278,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 51.907227,
-0.3644342,
"United Kingdom" 
],
[
 51.742897,
-0.19653699,
"United Kingdom" 
],
[
 51.440624,
-2.5683782,
"United Kingdom" 
],
[
 51.476223,
-2.6408238,
"United Kingdom" 
],
[
 51.493427,
-2.7707202,
"United Kingdom" 
],
[
 51.440556,
-2.5827668,
"United Kingdom" 
],
[
 51.42271,
-2.5537722,
"United Kingdom" 
],
[
 51.485054,
-2.6697545,
"United Kingdom" 
],
[
 51.440624,
-2.5683782,
"United Kingdom" 
],
[
 51.494434,
-2.5978599,
"United Kingdom" 
],
[
 51.367634,
-2.7542398,
"United Kingdom" 
],
[
 51.369534,
-2.3519914,
"United Kingdom" 
],
[
 51.369534,
-2.3519914,
"United Kingdom" 
],
[
 51.46753,
-2.5831103,
"United Kingdom" 
],
[
 51.440483,
-2.5971553,
"United Kingdom" 
],
[
 51.458317,
-2.626178,
"United Kingdom" 
],
[
 51.485443,
-2.5977423,
"United Kingdom" 
],
[
 51.47645,
-2.5976248,
"United Kingdom" 
],
[
 51.49352,
-2.7563155,
"United Kingdom" 
],
[
 51.467457,
-2.5975072,
"United Kingdom" 
],
[
 51.47686,
-2.5112252,
"United Kingdom" 
],
[
 51.449818,
-2.5253155,
"United Kingdom" 
],
[
 51.438877,
-2.856136,
"United Kingdom" 
],
[
 51.422424,
-2.6113036,
"United Kingdom" 
],
[
 51.440693,
-2.5539896,
"United Kingdom" 
],
[
 51.494358,
-2.6122653,
"United Kingdom" 
],
[
 51.467384,
-2.6119041,
"United Kingdom" 
],
[
 51.413506,
-2.5968037,
"United Kingdom" 
],
[
 51.458317,
-2.626178,
"United Kingdom" 
],
[
 51.449398,
-2.6116638,
"United Kingdom" 
],
[
 51.3302,
-2.954596,
"United Kingdom" 
],
[
 51.458317,
-2.626178,
"United Kingdom" 
],
[
 51.449474,
-2.5972726,
"United Kingdom" 
],
[
 52.06857,
0.8453797,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 51.96329,
1.4211539,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 51.96329,
1.4211539,
"United Kingdom" 
],
[
 51.967426,
1.2758358,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.45034,
-1.4729179,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 53.36045,
-1.4740279,
"United Kingdom" 
],
[
 51.626057,
-0.2011748,
"United Kingdom" 
],
[
 51.626057,
-0.2011748,
"United Kingdom" 
],
[
 53.376293,
-2.8869743,
"United Kingdom" 
],
[
 51.46974,
-1.0640929,
"United Kingdom" 
],
[
 53.25453,
-4.023846,
"United Kingdom" 
],
[
 50.74918,
-3.0632315,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 50.265156,
-5.0171494,
"United Kingdom" 
],
[
 51.742687,
-1.6378739,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.65926,
-3.0611997,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 51.91121,
-0.32793793,
"United Kingdom" 
],
[
 53.62076,
-0.41233814,
"United Kingdom" 
],
[
 50.257538,
-5.297342,
"United Kingdom" 
],
[
 51.816853,
-3.9587765,
"United Kingdom" 
],
[
 50.746254,
-3.346685,
"United Kingdom" 
],
[
 50.66407,
-2.070753,
"United Kingdom" 
],
[
 49.951286,
-6.3920474,
"United Kingdom" 
],
[
 51.53927,
0.3795131,
"United Kingdom" 
],
[
 51.724487,
-4.099594,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.00294,
-4.2093987,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 50.265156,
-5.0171494,
"United Kingdom" 
],
[
 51.199993,
-2.9304304,
"United Kingdom" 
],
[
 50.261433,
-5.157261,
"United Kingdom" 
],
[
 50.167744,
-5.291153,
"United Kingdom" 
],
[
 50.75297,
-2.4962103,
"United Kingdom" 
],
[
 50.37384,
-4.1800337,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.907356,
0.48940247,
"United Kingdom" 
],
[
 50.293114,
-3.6146727,
"United Kingdom" 
],
[
 51.556995,
-0.7737722,
"United Kingdom" 
],
[
 50.35124,
-5.163218,
"United Kingdom" 
],
[
 50.573105,
-2.4943182,
"United Kingdom" 
],
[
 50.66407,
-2.070753,
"United Kingdom" 
],
[
 51.650635,
-1.2049326,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 50.74918,
-0.93676853,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 50.832535,
-0.366784,
"United Kingdom" 
],
[
 51.829384,
-1.0566568,
"United Kingdom" 
],
[
 50.261433,
-5.157261,
"United Kingdom" 
],
[
 53.16206,
-4.1691036,
"United Kingdom" 
],
[
 50.66304,
-2.495262,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.290966,
-2.7888398,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.836163,
-3.3492713,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 49.951286,
-6.3920474,
"United Kingdom" 
],
[
 50.261433,
-5.157261,
"United Kingdom" 
],
[
 51.721813,
-4.2442775,
"United Kingdom" 
],
[
 50.747803,
-3.2049642,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.01233,
-0.3604755,
"United Kingdom" 
],
[
 51.4655,
-0.63224727,
"United Kingdom" 
],
[
 50.66407,
-1.9292469,
"United Kingdom" 
],
[
 51.650635,
-1.2049326,
"United Kingdom" 
],
[
 54.323708,
-4.537412,
"United Kingdom" 
],
[
 50.66407,
-2.070753,
"United Kingdom" 
],
[
 50.832535,
-3.633216,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.020157,
-2.926826,
"United Kingdom" 
],
[
 50.35124,
-5.163218,
"United Kingdom" 
],
[
 50.560776,
-3.7650113,
"United Kingdom" 
],
[
 50.751423,
-2.7797363,
"United Kingdom" 
],
[
 50.286503,
-4.035639,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.379826,
-2.934072,
"United Kingdom" 
],
[
 51.4655,
-0.63224727,
"United Kingdom" 
],
[
 51.54955,
-0.19698207,
"United Kingdom" 
],
[
 50.84135,
-2.781234,
"United Kingdom" 
],
[
 51.377186,
-0.7785831,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 53.99083,
-2.0762687,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 51.918034,
-3.0906193,
"United Kingdom" 
],
[
 50.293114,
-3.6146727,
"United Kingdom" 
],
[
 51.729305,
-0.18983695,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 50.07794,
-5.2849946,
"United Kingdom" 
],
[
 51.651524,
-2.6505208,
"United Kingdom" 
],
[
 50.84394,
-1.9289752,
"United Kingdom" 
],
[
 50.657887,
-3.2026615,
"United Kingdom" 
],
[
 51.110077,
-2.9286234,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 51.18774,
-0.06802027,
"United Kingdom" 
],
[
 50.834435,
-3.491251,
"United Kingdom" 
],
[
 50.361942,
-4.742008,
"United Kingdom" 
],
[
 51.551674,
-0.34115562,
"United Kingdom" 
],
[
 51.88537,
0.97914094,
"United Kingdom" 
],
[
 51.017548,
-3.211943,
"United Kingdom" 
],
[
 52.4974,
1.6098989,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 50.35124,
-5.163218,
"United Kingdom" 
],
[
 50.265156,
-5.0171494,
"United Kingdom" 
],
[
 50.84394,
-2.0710247,
"United Kingdom" 
],
[
 50.361942,
-4.742008,
"United Kingdom" 
],
[
 51.46179,
-0.34441733,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.901516,
-4.253226,
"United Kingdom" 
],
[
 50.754005,
-1.9291114,
"United Kingdom" 
],
[
 51.10589,
-0.6428895,
"United Kingdom" 
],
[
 50.840313,
-1.0767416,
"United Kingdom" 
],
[
 51.470802,
-2.7919376,
"United Kingdom" 
],
[
 50.66407,
-1.9292469,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.010242,
-0.217979,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.842907,
-1.5028363,
"United Kingdom" 
],
[
 50.171623,
-5.1513333,
"United Kingdom" 
],
[
 54.25755,
-2.8443713,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 50.288876,
-3.8953342,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 51.194042,
-0.49716815,
"United Kingdom" 
],
[
 50.75297,
-1.5037897,
"United Kingdom" 
],
[
 50.84377,
-2.2130737,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.28868,
-3.0756438,
"United Kingdom" 
],
[
 50.371117,
-4.320562,
"United Kingdom" 
],
[
 53.251896,
-4.173647,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 51.639427,
-0.19341879,
"United Kingdom" 
],
[
 50.933704,
-2.2134843,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.645298,
-3.373157,
"United Kingdom" 
],
[
 53.24907,
-4.323423,
"United Kingdom" 
],
[
 51.369785,
-0.20405345,
"United Kingdom" 
],
[
 50.754005,
-2.0708885,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 50.175335,
-5.011484,
"United Kingdom" 
],
[
 50.175335,
-5.011484,
"United Kingdom" 
],
[
 51.10589,
-0.6428895,
"United Kingdom" 
],
[
 50.171623,
-5.1513333,
"United Kingdom" 
],
[
 51.100132,
-0.21452446,
"United Kingdom" 
],
[
 51.010242,
-0.217979,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 52.40767,
1.6025597,
"United Kingdom" 
],
[
 52.06857,
0.8453797,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 52.4031,
1.7492679,
"United Kingdom" 
],
[
 52.64326,
-2.5712774,
"United Kingdom" 
],
[
 52.81242,
-3.1202908,
"United Kingdom" 
],
[
 52.81559,
-3.1181462,
"United Kingdom" 
],
[
 52.81559,
-3.1181462,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.54476,
-4.091308,
"United Kingdom" 
],
[
 51.4655,
-3.3677528,
"United Kingdom" 
],
[
 51.4655,
-3.3677528,
"United Kingdom" 
],
[
 51.4676,
-2.5687134,
"United Kingdom" 
],
[
 51.476524,
-2.583225,
"United Kingdom" 
],
[
 51.431416,
-2.6114235,
"United Kingdom" 
],
[
 51.476593,
-2.5688252,
"United Kingdom" 
],
[
 51.494205,
-2.6410758,
"United Kingdom" 
],
[
 51.49352,
-2.7563155,
"United Kingdom" 
],
[
 51.494358,
-2.6122653,
"United Kingdom" 
],
[
 51.46767,
-2.5543163,
"United Kingdom" 
],
[
 51.503277,
-2.626794,
"United Kingdom" 
],
[
 51.494286,
-2.6266706,
"United Kingdom" 
],
[
 51.458317,
-2.626178,
"United Kingdom" 
],
[
 51.412773,
-2.7262208,
"United Kingdom" 
],
[
 51.485367,
-2.612145,
"United Kingdom" 
],
[
 51.503426,
-2.5979776,
"United Kingdom" 
],
[
 51.404655,
-2.5679321,
"United Kingdom" 
],
[
 51.512417,
-2.5980954,
"United Kingdom" 
],
[
 51.288254,
-2.4517615,
"United Kingdom" 
],
[
 51.324112,
-2.4808195,
"United Kingdom" 
],
[
 51.45881,
-2.5254188,
"United Kingdom" 
],
[
 51.43156,
-2.5826523,
"United Kingdom" 
],
[
 51.413784,
-2.5392833,
"United Kingdom" 
],
[
 51.449398,
-2.6116638,
"United Kingdom" 
],
[
 51.494125,
-2.655481,
"United Kingdom" 
],
[
 51.485516,
-2.5833397,
"United Kingdom" 
],
[
 51.43975,
-2.7266486,
"United Kingdom" 
],
[
 51.48529,
-2.6265473,
"United Kingdom" 
],
[
 51.458466,
-2.59739,
"United Kingdom" 
],
[
 51.476376,
-2.6120245,
"United Kingdom" 
],
[
 51.404587,
-2.5823095,
"United Kingdom" 
],
[
 51.357056,
-2.9695177,
"United Kingdom" 
],
[
 51.348064,
-2.969328,
"United Kingdom" 
],
[
 51.440826,
-2.5252123,
"United Kingdom" 
],
[
 51.458393,
-2.611784,
"United Kingdom" 
],
[
 51.43102,
-2.6833506,
"United Kingdom" 
],
[
 51.413647,
-2.5680437,
"United Kingdom" 
],
[
 51.503197,
-2.6412022,
"United Kingdom" 
],
[
 51.44932,
-2.626055,
"United Kingdom" 
],
[
 51.413433,
-2.6111836,
"United Kingdom" 
],
[
 51.358643,
-2.7540922,
"United Kingdom" 
],
[
 51.43984,
-2.7122607,
"United Kingdom" 
],
[
 51.49396,
-2.6842914,
"United Kingdom" 
],
[
 51.440624,
-2.5683782,
"United Kingdom" 
],
[
 51.4763,
-2.6264243,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 52.552277,
-2.2212522,
"United Kingdom" 
],
[
 52.55246,
-1.926249,
"United Kingdom" 
],
[
 52.55246,
-1.926249,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 50.167744,
-5.291153,
"United Kingdom" 
],
[
 51.3719,
-0.3476622,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 50.66149,
-1.2217541,
"United Kingdom" 
],
[
 53.99083,
-2.0762687,
"United Kingdom" 
],
[
 50.65634,
-3.344112,
"United Kingdom" 
],
[
 50.66046,
-1.0802728,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 52.072,
0.6996428,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 50.261433,
-5.157261,
"United Kingdom" 
],
[
 51.199993,
-2.9304304,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.171623,
-5.1513333,
"United Kingdom" 
],
[
 50.746254,
-3.346685,
"United Kingdom" 
],
[
 50.92434,
-3.494124,
"United Kingdom" 
],
[
 50.662354,
-1.363243,
"United Kingdom" 
],
[
 51.823296,
-0.4763173,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 51.017548,
-3.211943,
"United Kingdom" 
],
[
 50.65462,
-3.485549,
"United Kingdom" 
],
[
 51.192116,
-3.645898,
"United Kingdom" 
],
[
 50.752285,
-1.3620236,
"United Kingdom" 
],
[
 51.110077,
-2.9286234,
"United Kingdom" 
],
[
 50.84135,
-1.218766,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.83772,
-0.7927215,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 50.66304,
-1.5047381,
"United Kingdom" 
],
[
 51.112694,
-2.500053,
"United Kingdom" 
],
[
 51.194042,
-0.49716815,
"United Kingdom" 
],
[
 50.66149,
-1.2217541,
"United Kingdom" 
],
[
 50.66046,
-1.0802728,
"United Kingdom" 
],
[
 51.369785,
-0.20405345,
"United Kingdom" 
],
[
 52.71545,
-3.9987974,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 51.020157,
-2.926826,
"United Kingdom" 
],
[
 52.4031,
1.7492679,
"United Kingdom" 
],
[
 50.571564,
-1.2232367,
"United Kingdom" 
],
[
 50.383022,
-3.6177242,
"United Kingdom" 
],
[
 52.317932,
1.5952591,
"United Kingdom" 
],
[
 50.727654,
-4.4798613,
"United Kingdom" 
],
[
 51.88537,
0.97914094,
"United Kingdom" 
],
[
 51.20192,
-2.6441677,
"United Kingdom" 
],
[
 50.463715,
-4.1841645,
"United Kingdom" 
],
[
 52.71545,
-3.9987974,
"United Kingdom" 
],
[
 51.96329,
1.4211539,
"United Kingdom" 
],
[
 51.10589,
-0.6428895,
"United Kingdom" 
],
[
 50.163692,
-5.430941,
"United Kingdom" 
],
[
 50.283962,
-4.1759233,
"United Kingdom" 
],
[
 50.159473,
-5.570697,
"United Kingdom" 
],
[
 50.75039,
-1.0785117,
"United Kingdom" 
],
[
 51.3719,
-0.3476622,
"United Kingdom" 
],
[
 51.88537,
0.97914094,
"United Kingdom" 
],
[
 51.01894,
-3.0693898,
"United Kingdom" 
],
[
 52.06857,
0.8453797,
"United Kingdom" 
],
[
 50.751423,
-1.2202638,
"United Kingdom" 
],
[
 49.956474,
-6.2530303,
"United Kingdom" 
],
[
 51.194042,
-3.502832,
"United Kingdom" 
],
[
 53.41154,
-2.9779854,
"United Kingdom" 
],
[
 53.64498,
-3.013637,
"United Kingdom" 
],
[
 51.467308,
-2.626301,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 50.36823,
-4.461068,
"United Kingdom" 
],
[
 50.57413,
-1.9293817,
"United Kingdom" 
],
[
 50.472927,
-3.620791,
"United Kingdom" 
],
[
 51.01894,
-3.0693898,
"United Kingdom" 
],
[
 50.538197,
-4.893384,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.839104,
-3.0652738,
"United Kingdom" 
],
[
 51.471687,
-2.64796,
"United Kingdom" 
],
[
 50.361942,
-4.742008,
"United Kingdom" 
],
[
 50.834435,
-0.50874895,
"United Kingdom" 
],
[
 53.358746,
-1.1735004,
"United Kingdom" 
],
[
 52.057198,
1.282405,
"United Kingdom" 
],
[
 52.865036,
1.3431085,
"United Kingdom" 
],
[
 51.108856,
-3.0714636,
"United Kingdom" 
],
[
 50.171623,
-5.1513333,
"United Kingdom" 
],
[
 51.192116,
-0.35410187,
"United Kingdom" 
],
[
 52.072,
0.6996428,
"United Kingdom" 
] 
];
data.addColumn('number','Latitude');
data.addColumn('number','Longitude');
data.addColumn('string','country');
data.addRows(datajson);
return(data);
}
 
// jsDrawChart
function drawChartMapIDb085424efa() {
var data = gvisDataMapIDb085424efa();
var options = {};
options["showTip"] = true;
options["showLine"] = false;
options["enableScrollWheel"] = true;
options["useMapTypeControl"] = true;
options["width"] =   1400;
options["height"] =    800;

    var chart = new google.visualization.Map(
    document.getElementById('MapIDb085424efa')
    );
    chart.draw(data,options);
    

}
  
 
// jsDisplayChart
(function() {
var pkgs = window.__gvisPackages = window.__gvisPackages || [];
var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
var chartid = "map";
  
// Manually see if chartid is in pkgs (not all browsers support Array.indexOf)
var i, newPackage = true;
for (i = 0; newPackage && i < pkgs.length; i++) {
if (pkgs[i] === chartid)
newPackage = false;
}
if (newPackage)
  pkgs.push(chartid);
  
// Add the drawChart function to the global list of callbacks
callbacks.push(drawChartMapIDb085424efa);
})();
function displayChartMapIDb085424efa() {
  var pkgs = window.__gvisPackages = window.__gvisPackages || [];
  var callbacks = window.__gvisCallbacks = window.__gvisCallbacks || [];
  window.clearTimeout(window.__gvisLoad);
  // The timeout is set to 100 because otherwise the container div we are
  // targeting might not be part of the document yet
  window.__gvisLoad = setTimeout(function() {
  var pkgCount = pkgs.length;
  google.load("visualization", "1", { packages:pkgs, callback: function() {
  if (pkgCount != pkgs.length) {
  // Race condition where another setTimeout call snuck in after us; if
  // that call added a package, we must not shift its callback
  return;
}
while (callbacks.length > 0)
callbacks.shift()();
} });
}, 100);
}
 
// jsFooter
</script>
 
<!-- jsChart -->  
<script type="text/javascript" src="https://www.google.com/jsapi?callback=displayChartMapIDb085424efa"></script>
 
<!-- divChart -->
  
<div id="MapIDb085424efa"
  style="width: 1400px; height: 800px;">
</div>

```r
#print(map.gb)    # get HTML suitable for a webpage
```





<br>
<br>
<br>

### Drawing polygons and polylines (e.g. for digitising) <a name="digitise"></a>



```r
plot(gbmap)
mypolygon <- drawPoly()  # click on the map to draw a polygon and press ESC when finished
summary(mypolygon)  # now you have a spatial polygon! Easy, isn't it?
```



<br>
<br>
<br>
<br>

Converting between formats, reading in, and saving spatial vector data <a name="iovec"></a>
-------------------------------------------------------------------

<br>

### Exporting KML (Google Earth)

```r
writeOGR(locs.gb, dsn = "locsgb.kml", layer = "locs.gb", driver = "KML")
```


### Reading KML

```r
newmap <- readOGR("locsgb.kml", layer = "locs.gb")
```

```
## OGR data source with driver: KML 
## Source: "locsgb.kml", layer: "locs.gb"
## with 578 features and 2 fields
## Feature type: wkbPoint with 2 dimensions
```


### Save as shapefile

```r
writePointsShape(locs.gb, "locsgb")
```


### Reading shapefiles

```r
gb.shape <- readShapePoints("locsgb.shp")
plot(gb.shape)
```

![plot of chunk unnamed-chunk-29](figure/unnamed-chunk-29.png) 

Use `readShapePoly` to read polygon shapefiles, and `readShapeLines` to read polylines.
See also `shapefile` in `raster` package.   



<br>
<br>
<br>

Changing projection of spatial vector data <a name="changeproj"></a>
-------------------------------------------

`spTransform` (package `sp`) will do the projection as long as the original and new projection are correctly specified.

<br>

### Projecting point dataset

To illustrate, let's project the dataframe with Laurus nobilis coordinates that we obtained above:

```r
summary(locs)
```

```
## Object of class SpatialPointsDataFrame
## Coordinates:
##         min    max
## lon -123.25 145.04
## lat  -37.78  59.84
## Is projected: FALSE 
## proj4string :
## [+proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0]
## Number of points: 2109
## Data attributes:
##    Length     Class      Mode 
##      2109 character character
```

The original coordinates are in lat lon format. Let's define the new desired projection:
Lambert Azimuthal Equal Area in this case 
(look up parameters at [http://spatialreference.org](http://spatialreference.org))

```r
crs.laea <- CRS("+proj=laea +lat_0=52 +lon_0=10 +x_0=4321000 +y_0=3210000 +ellps=GRS80 +units=m +no_defs")  # Lambert Azimuthal Equal Area
locs.laea <- spTransform(locs, crs.laea)  # spTransform makes the projection
```


<br>

### Projecting shapefile of countries

```r
plot(countriesLow)  # countries map in geographical projection
```

![plot of chunk unnamed-chunk-32](figure/unnamed-chunk-32.png) 

```r
country.laea <- spTransform(countriesLow, crs.laea)  # project
```


Let's plot this:

```r
plot(locs.laea, pch = 20, col = "steelblue")
plot(country.laea, add = T)
```

![plot of chunk unnamed-chunk-33](figure/unnamed-chunk-331.png) 

```r

# define spatial limits for plotting
plot(locs.laea, pch = 20, col = "steelblue", xlim = c(1800000, 3900000), ylim = c(1e+06, 
    3e+06))
plot(country.laea, add = T)
```

![plot of chunk unnamed-chunk-33](figure/unnamed-chunk-332.png) 





<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>
<br>
<br>







4. USING RASTER (GRID) DATA <a name="raster"></a>
===========================


<br>

### Downloading raster climate data from internet <a name="getdata"></a>
The `getData` function from the `dismo` package will easily retrieve climate data, elevation, administrative boundaries, etc. Check also the excellent [rWBclimate package](http://ropensci.org/packages/rwbclimate.html) by rOpenSci with additional functionality. 


```r
tmin <- getData("worldclim", var = "tmin", res = 10)  # this will download 
# global data on minimum temperature at 10' resolution
```


<br>

### Loading a raster layer <a name="loadraster"></a>


```r
tmin1 <- raster(paste(getwd(), "/wc10/tmin1.bil", sep = ""))  # Tmin for January
```

Easy! The `raster` function reads many different formats, including Arc ASCII grids or netcdf files (see raster help). And values are stored on disk instead of memory! (useful for large rasters) 

```r
fromDisk(tmin1)
```

```
## [1] TRUE
```


Let's examine the raster layer:

```r
tmin1 <- tmin1/10  # Worldclim temperature data come in decimal degrees 
tmin1  # look at the info
```

```
## class       : RasterLayer 
## dimensions  : 900, 2160, 1944000  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -180, 180, -60, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs 
## data source : in memory
## names       : tmin1 
## values      : -54.7, 26.6  (min, max)
```

```r
plot(tmin1)
```

![plot of chunk unnamed-chunk-37](figure/unnamed-chunk-37.png) 


<br>

### Creating a raster stack <a name="rasterstack"></a>

A raster stack is collection of many raster layers with the same projection, spatial extent and resolution.
Let's collect several raster files from disk and read them as a single raster stack:


```r

library(gtools)
file.remove(paste(getwd(), "/wc10/", "tmin_10m_bil.zip", sep = ""))
```

```
## [1] TRUE
```

```r
list.ras <- mixedsort(list.files(paste(getwd(), "/wc10/", sep = ""), full.names = T, 
    pattern = ".bil"))
list.ras  # I have just collected a list of the files containing monthly temperature values
```

```
##  [1] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin1.bil" 
##  [2] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin2.bil" 
##  [3] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin3.bil" 
##  [4] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin4.bil" 
##  [5] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin5.bil" 
##  [6] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin6.bil" 
##  [7] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin7.bil" 
##  [8] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin8.bil" 
##  [9] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin9.bil" 
## [10] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin10.bil"
## [11] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin11.bil"
## [12] "C:/Users/FRS/Dropbox/R.scripts/my.Rcode/R-GIS tutorial/wc10/tmin12.bil"
```

```r
tmin.all <- stack(list.ras)
tmin.all
```

```
## class       : RasterStack 
## dimensions  : 900, 2160, 1944000, 12  (nrow, ncol, ncell, nlayers)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -180, 180, -60, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs 
## names       : tmin1, tmin2, tmin3, tmin4, tmin5, tmin6, tmin7, tmin8, tmin9, tmin10, tmin11, tmin12 
## min values  :  -547,  -525,  -468,  -379,  -225,  -170,  -171,  -178,  -192,   -302,   -449,   -522 
## max values  :   266,   273,   277,   283,   295,   312,   311,   312,   300,    268,    267,    268
```

```r
tmin.all <- tmin.all/10
plot(tmin.all)
```

![plot of chunk unnamed-chunk-38](figure/unnamed-chunk-38.png) 



<br>

### Raster bricks <a name="rasterbrick"></a>

A rasterbrick is similar to a raster stack (i.e. multiple layers with the same extent and resolution), but all the data must be stored in a single file on disk.


```r
tmin.brick <- brick(tmin.all)  # creates rasterbrick
```


<br>

### Crop rasters <a name="cropraster"></a>

Crop raster manually (drawing region of interest):


```r
plot(tmin1)
newext <- drawExtent()  # click twice on the map to select the region of interest
tmin1.c <- crop(tmin1, newext)
plot(tmin1.c)
```


Alternatively, provide coordinates for the limits of the region of interest:

```r
newext <- c(-10, 10, 30, 50)
tmin1.c <- crop(tmin1, newext)
plot(tmin1.c)
```

![plot of chunk unnamed-chunk-41](figure/unnamed-chunk-411.png) 

```r

tmin.all.c <- crop(tmin.all, newext)
plot(tmin.all.c)
```

![plot of chunk unnamed-chunk-41](figure/unnamed-chunk-412.png) 


<br>

### Define spatial projection of the rasters <a name="projectionraster"></a>


```r
crs.geo  # defined above
```

```
## CRS arguments:
##  +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0
```

```r
projection(tmin1.c) <- crs.geo
projection(tmin.all.c) <- crs.geo
tmin1.c  # notice info at coord.ref.
```

```
## class       : RasterLayer 
## dimensions  : 120, 120, 14400  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : in memory
## names       : tmin1 
## values      : -12.3, 10.3  (min, max)
```


<br>

### Changing projection <a name="changeprojraster"></a>

Use `projectRaster` function:

```r
tmin1.proj <- projectRaster(tmin1.c, crs = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +no_defs")  # can also use a template raster, see ?projectRaster
tmin1.proj  # notice info at coord.ref.
```

```
## class       : RasterLayer 
## dimensions  : 132, 134, 17688  (nrow, ncol, ncell)
## resolution  : 18600, 24200  (x, y)
## extent      : -1243395, 1249005, 3372876, 6567276  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +no_defs 
## data source : in memory
## names       : tmin1 
## values      : -11.59, 10.3  (min, max)
```

```r
plot(tmin1.proj)
```

![plot of chunk unnamed-chunk-43](figure/unnamed-chunk-43.png) 



<br>

### Plotting raster data <a name="plotraster"></a>

Different plotting functions:

```r
histogram(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-441.png) 

```r
pairs(tmin.all.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-442.png) 

```r
persp(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-443.png) 

```r
contour(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-444.png) 

```r
contourplot(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-445.png) 

```r
levelplot(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-446.png) 

```r
# plot3D(tmin1.c)
bwplot(tmin.all.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-447.png) 

```r
densityplot(tmin1.c)
```

![plot of chunk unnamed-chunk-44](figure/unnamed-chunk-448.png) 



### Spatial autocorrelation <a name="autocorrelation"></a>


```r
Moran(tmin1.c)  # global Moran's I
```

```
## [1] 0.9099
```

```r
tmin1.Moran <- MoranLocal(tmin1.c)
plot(tmin1.Moran)
```

![plot of chunk unnamed-chunk-45](figure/unnamed-chunk-45.png) 



### Extract values from raster <a name="extract"></a>

Use `extract` function:

```r
head(locs)  # we'll obtain tmin values for our points
```

```
##   country
## 1   Spain
## 2   Spain
## 3   Spain
## 4   Spain
## 5   Spain
## 6   Spain
```

```r
projection(tmin1) <- crs.geo
locs$tmin1 <- extract(tmin1, locs)  # raster values 
# are incorporated to the dataframe
head(locs)
```

```
##   country tmin1
## 1   Spain   6.7
## 2   Spain   2.1
## 3   Spain   6.7
## 4   Spain   4.2
## 5   Spain   6.2
## 6   Spain   6.7
```


You can also extract values for a given region instead of the whole raster:

```r
plot(tmin1.c)
reg.clim <- extract(tmin1.c, drawExtent())  # click twice to 
# draw extent of the region of interest
summary(reg.clim)
```


Using `rasterToPoints`:

```r
# rasterToPoints
tminvals <- rasterToPoints(tmin1.c)
head(tminvals)
```

```
##            x     y tmin1
## [1,] -6.4167 49.92   4.2
## [2,] -6.2500 49.92   4.2
## [3,] -5.2500 49.92   2.4
## [4,]  0.5833 49.92   1.0
## [5,]  0.7500 49.92   1.0
## [6,]  0.9167 49.92   1.0
```


And also, the `click` function will get values from particular locations in the map

```r
plot(tmin1.c)
click(tmin1.c, n = 3)  # click n times in the map to get values
```


<br>

### Rasterize points, lines or polygons <a name="rasterize"></a>


```r
locs2ras <- rasterize(locs.gb, tmin1, field = rep(1, nrow(locs.gb)))
locs2ras
```

```
## class       : RasterLayer 
## dimensions  : 900, 2160, 1944000  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -180, 180, -60, 90  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : in memory
## names       : layer 
## values      : 1, 1  (min, max)
```

```r
plot(locs2ras, xlim = c(-10, 10), ylim = c(45, 60), legend = F)
data(wrld_simpl)
plot(wrld_simpl, add = T)
```

![plot of chunk unnamed-chunk-50](figure/unnamed-chunk-50.png) 



<br>

### Changing raster resolution <a name="resolution"></a>

Use `aggregate` function:

```r
tmin1.lowres <- aggregate(tmin1.c, fact = 2, fun = mean)
tmin1.lowres
```

```
## class       : RasterLayer 
## dimensions  : 60, 60, 3600  (nrow, ncol, ncell)
## resolution  : 0.3333, 0.3333  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : in memory
## names       : tmin1 
## values      : -10.57, 10.1  (min, max)
```

```r
tmin1.c  # compare
```

```
## class       : RasterLayer 
## dimensions  : 120, 120, 14400  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : in memory
## names       : tmin1 
## values      : -12.3, 10.3  (min, max)
```

```r
par(mfcol = c(1, 2))
plot(tmin1.c, main = "original")
plot(tmin1.lowres, main = "low resolution")
```

![plot of chunk unnamed-chunk-51](figure/unnamed-chunk-51.png) 



### Spline interpolation <a name="interpolation"></a>


```r
xy <- data.frame(xyFromCell(tmin1.lowres, 1:ncell(tmin1.lowres)))  # get raster cell coordinates
head(xy)
```

```
##        x     y
## 1 -9.833 49.83
## 2 -9.500 49.83
## 3 -9.167 49.83
## 4 -8.833 49.83
## 5 -8.500 49.83
## 6 -8.167 49.83
```

```r
vals <- getValues(tmin1.lowres)
library(fields)
spline <- Tps(xy, vals)  # thin plate spline
intras <- interpolate(tmin1.c, spline)
intras  # note new resolution
```

```
## class       : RasterLayer 
## dimensions  : 120, 120, 14400  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : in memory
## names       : layer 
## values      : -10.43, 13.16  (min, max)
```

```r
plot(intras)
```

![plot of chunk unnamed-chunk-52](figure/unnamed-chunk-521.png) 

```r
intras <- mask(intras, tmin1.c)  # mask to land areas only
plot(intras)
title("Interpolated raster")
```

![plot of chunk unnamed-chunk-52](figure/unnamed-chunk-522.png) 


### Setting all rasters to the same extent, projection and resolution all in one <a name="spatialsync"></a>

See `spatial_sync_raster` function from `spatial.tools` package.

<br>


### Elevations, slope, aspect, etc <a name="elevation"></a>

<br>
Download elevation data from internet:

```r
elevation <- getData("alt", country = "ESP")
```


Some quick maps:

```r
x <- terrain(elevation, opt = c("slope", "aspect"), unit = "degrees")
plot(x)
```

![plot of chunk unnamed-chunk-54](figure/unnamed-chunk-541.png) 

```r

slope <- terrain(elevation, opt = "slope")
aspect <- terrain(elevation, opt = "aspect")
hill <- hillShade(slope, aspect, 40, 270)
plot(hill, col = grey(0:100/100), legend = FALSE, main = "Spain")
plot(elevation, col = rainbow(25, alpha = 0.35), add = TRUE)
```

![plot of chunk unnamed-chunk-54](figure/unnamed-chunk-542.png) 



### Saving and exporting raster data <a name="saveraster"></a>


Saving raster to file:


```r
writeRaster(tmin1.c, filename = "tmin1.c.grd")
```

```
## class       : RasterLayer 
## dimensions  : 120, 120, 14400  (nrow, ncol, ncell)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : C:\Users\FRS\Dropbox\R.scripts\my.Rcode\R-GIS tutorial\tmin1.c.grd 
## names       : tmin1 
## values      : -12.3, 10.3  (min, max)
```

```r
writeRaster(tmin.all.c, filename = "tmin.all.grd")
```

```
## class       : RasterBrick 
## dimensions  : 120, 120, 14400, 12  (nrow, ncol, ncell, nlayers)
## resolution  : 0.1667, 0.1667  (x, y)
## extent      : -10, 10, 30, 50  (xmin, xmax, ymin, ymax)
## coord. ref. : +proj=longlat +ellps=WGS84 +datum=WGS84 +towgs84=0,0,0 
## data source : C:\Users\FRS\Dropbox\R.scripts\my.Rcode\R-GIS tutorial\tmin.all.grd 
## names       : tmin1, tmin2, tmin3, tmin4, tmin5, tmin6, tmin7, tmin8, tmin9, tmin10, tmin11, tmin12 
## min values  : -12.3, -12.5, -10.8,  -8.6,  -4.2,  -0.8,   1.8,   1.6,  -0.1,   -3.3,   -8.1,  -10.8 
## max values  :  10.3,  10.8,  12.5,  14.5,  19.7,  24.7,  27.6,  26.7,  22.9,   16.9,   13.7,   11.3
```

`writeRaster` can export to many different file types, see help.

<br>

Exporting to KML (Google Earth)

```r
tmin1.c <- raster(tmin.all.c, 1)
KML(tmin1.c, file = "tmin1.kml")
KML(tmin.all.c)  # can export multiple layers
```


<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

5. SPATIAL STATISTICS (just a glance) <a name="spatstats"></a>
=====================================

<br>

### Point pattern analysis <a name="pointpatterns"></a>

Some useful packages:


```r
library(spatial)
library(spatstat)
library(spatgraphs)
library(ecespa)  # ecological focus
```

See [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html).

Let's do a quick example with Ripley's K function:

```r
data(fig1)
plot(fig1)  # point pattern
```

![plot of chunk unnamed-chunk-58](figure/unnamed-chunk-581.png) 

```r
data(Helianthemum)
cosa12 <- K1K2(Helianthemum, j = "deadpl", i = "survpl", r = seq(0, 200, le = 201), 
    nsim = 99, nrank = 1, correction = "isotropic")
```

```
## 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
## 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
## 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
## 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
## 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
## 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
## 91, 92, 93, 94, 95, 96, 97, 98,  99.
```

```r
plot(cosa12$k1k2, lty = c(2, 1, 2), col = c(2, 1, 2), xlim = c(0, 200), main = "survival- death", 
    ylab = expression(K[1] - K[2]), legend = FALSE)
```

![plot of chunk unnamed-chunk-58](figure/unnamed-chunk-582.png) 

```
##       lty col   key         label
## lo      2   2    lo         lo(r)
## K1-K2   1   1 K1-K2 K1(r) - K2(r)
## hi      2   2    hi         hi(r)
##                                                                               meaning
## lo                                            lower pointwise envelope of simulations
## K1-K2 differences of  Ripley isotropic correction estimate of expression(K[1] - K[2])
## hi                                            upper pointwise envelope of simulations
```


<br>

### Geostatistics <a name="geostatistics"></a>

Some useful packages:


```r
library(gstat)
library(geoR)
library(akima)  # for spline interpolation
library(spdep)  # dealing with spatial dependence
```

See [CRAN Spatial Task View](http://cran.r-project.org/web/views/Spatial.html).


<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

6. INTERACTING WITH OTHER GIS <a name="othergis"></a>
===============================================


```r
library(spgrass6)  # GRASS
library(RPyGeo)  # ArcGis (Python)
library(RSAGA)  # SAGA
library(spsextante)  # Sextante 

```


<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>


7. OTHER USEFUL PACKAGES <a name="otherpackages"></a>
=========================


```r
library(Metadata)  # automatically collates data from online GIS datasets (land cover, pop density, etc) for a given set of coordinates

# library(GeoXp) # Interactive exploratory spatial data analysis
example(columbus)
histomap(columbus, "CRIME")

library(maptools)
# readGPS

library(rangeMapper)  # plotting species distributions, richness and traits


# Species Distribution Modelling
library(dismo)
library(biomod2)
library(SDMTools)

library(BioCalc)  # computes 19 bioclimatic variables from monthly climatic values (tmin, tmax, prec)

```


<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>

8. TO LEARN MORE <a name="tolearnmore"></a>
================

* [ASDAR book](http://www.asdar-book.org/)

* Packages help and vignettes, especially

    http://cran.r-project.org/web/packages/raster/vignettes/Raster.pdf   
    http://cran.r-project.org/web/packages/dismo/vignettes/sdm.pdf   
    http://cran.r-project.org/web/packages/sp/vignettes/sp.pdf   

* [CRAN Task View: Analysis of Spatial Data](http://cran.r-project.org/web/views/Spatial.html)


* [Introduction to Spatial Data and ggplot2](http://rpubs.com/RobinLovelace/intro-spatial)

* [R spatial tips](http://spatial.ly/category/r-spatial-data-hints/)

* [R wiki: tips for spatial data](http://rwiki.sciviews.org/doku.php?id=tips:spatial-data&s=spatial)

* [Spatial analysis in R](http://www.maths.lancs.ac.uk/~rowlings/Teaching/Sheffield2013/index.html)

* [Displaying time series, spatial and space-time data with R](http://oscarperpinan.github.io/spacetime-vis/)

* [Notes on Spatial Data Operations in R](https://dl.dropboxusercontent.com/u/9577903/broomspatial.pdf)

* [Analysing spatial point patterns in R](http://www.csiro.au/resources/pf16h)

* [Spatial data in R](http://science.nature.nps.gov/im/datamgmt/statistics/r/advanced/Spatial.cfm)

* [NCEAS Geospatial use cases](http://www.nceas.ucsb.edu/scicomp/usecases)

* [Spatial Analyst](http://spatial-analyst.net)

* [Making maps with R](http://www.molecularecologist.com/2012/09/making-maps-with-r/)

* [The Visual Raster Cheat Sheet](http://www.rpubs.com/etiennebr/visualraster)

* [R-SIG-Geo mailing list](https://stat.ethz.ch/mailman/listinfo/R-SIG-Geo)





<br>
[Back to Contents](#contents)
<br>
<br>
<br>
<br>


================================================
FILE: README.md
================================================

Spatial data in R: Using R as a GIS     
========================================================


A tutorial to perform basic operations with spatial data in R, such as importing and exporting data (both vectorial and raster), plotting, analysing and making maps.


[Francisco Rodriguez-Sanchez](http://sites.google.com/site/rodriguezsanchezf) 


v 2.2  

27-01-2015 

Licence: [CC BY 4.0](http://creativecommons.org/licenses/by/4.0/)


Check out latest version at [http://pakillo.github.io/R-GIS-tutorial](http://pakillo.github.io/R-GIS-tutorial)


================================================
FILE: index.html
================================================
<!DOCTYPE html>
<!-- saved from url=(0014)about:internet -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >

<title>Spatial data in R: Using R as a GIS     </title>

<style type="text/css">
body, td {
   font-family: sans-serif;
   background-color: white;
   font-size: 12px;
   margin: 8px;
}

tt, code, pre {
   font-family: 'DejaVu Sans Mono', 'Droid Sans Mono', 'Lucida Console', Consolas, Monaco, monospace;
}

h1 { 
   font-size:2.2em; 
}

h2 { 
   font-size:1.8em; 
}

h3 { 
   font-size:1.4em; 
}

h4 { 
   font-size:1.0em; 
}

h5 { 
   font-size:0.9em; 
}

h6 { 
   font-size:0.8em; 
}

a:visited {
   color: rgb(50%, 0%, 50%);
}

pre {	
   margin-top: 0;
   max-width: 95%;
   border: 1px solid #ccc;
   white-space: pre-wrap;
}

pre code {
   display: block; padding: 0.5em;
}

code.r, code.cpp {
   background-color: #F8F8F8;
}

table, td, th {
  border: none;
}

blockquote {
   color:#666666;
   margin:0;
   padding-left: 1em;
   border-left: 0.5em #EEE solid;
}

hr {
   height: 0px;
   border-bottom: none;
   border-top-width: thin;
   border-top-style: dotted;
   border-top-color: #999999;
}

@media print {
   * { 
      background: transparent !important; 
      color: black !important; 
      filter:none !important; 
      -ms-filter: none !important; 
   }

   body { 
      font-size:12pt; 
      max-width:100%; 
   }
       
   a, a:visited { 
      text-decoration: underline; 
   }

   hr { 
      visibility: hidden;
      page-break-before: always;
   }

   pre, blockquote { 
      padding-right: 1em; 
      page-break-inside: avoid; 
   }

   tr, img { 
      page-break-inside: avoid; 
   }

   img { 
      max-width: 100% !important; 
   }

   @page :left { 
      margin: 15mm 20mm 15mm 10mm; 
   }
     
   @page :right { 
      margin: 15mm 10mm 15mm 20mm; 
   }

   p, h2, h3 { 
      orphans: 3; widows: 3; 
   }

   h2, h3 { 
      page-break-after: avoid; 
   }
}

</style>

<!-- Styles for R syntax highlighter -->
<style type="text/css">
   pre .operator,
   pre .paren {
     color: rgb(104, 118, 135)
   }

   pre .literal {
     color: rgb(88, 72, 246)
   }

   pre .number {
     color: rgb(0, 0, 205);
   }

   pre .comment {
     color: rgb(76, 136, 107);
   }

   pre .keyword {
     color: rgb(0, 0, 255);
   }

   pre .identifier {
     color: rgb(0, 0, 0);
   }

   pre .string {
     color: rgb(3, 106, 7);
   }
</style>

<!-- R syntax highlighter -->
<script type="text/javascript">
var hljs=new function(){function m(p){return p.replace(/&/gm,"&amp;").replace(/</gm,"&lt;")}function f(r,q,p){return RegExp(q,"m"+(r.cI?"i":"")+(p?"g":""))}function b(r){for(var p=0;p<r.childNodes.length;p++){var q=r.childNodes[p];if(q.nodeName=="CODE"){return q}if(!(q.nodeType==3&&q.nodeValue.match(/\s+/))){break}}}function h(t,s){var p="";for(var r=0;r<t.childNodes.length;r++){if(t.childNodes[r].nodeType==3){var q=t.childNodes[r].nodeValue;if(s){q=q.replace(/\n/g,"")}p+=q}else{if(t.childNodes[r].nodeName=="BR"){p+="\n"}else{p+=h(t.childNodes[r])}}}if(/MSIE [678]/.test(navigator.userAgent)){p=p.replace(/\r/g,"\n")}return p}function a(s){var r=s.className.split(/\s+/);r=r.concat(s.parentNode.className.split(/\s+/));for(var q=0;q<r.length;q++){var p=r[q].replace(/^language-/,"");if(e[p]){return p}}}function c(q){var p=[];(function(s,t){for(var r=0;r<s.childNodes.length;r++){if(s.childNodes[r].nodeType==3){t+=s.childNodes[r].nodeValue.length}else{if(s.childNodes[r].nodeName=="BR"){t+=1}else{if(s.childNodes[r].nodeType==1){p.push({event:"start",offset:t,node:s.childNodes[r]});t=arguments.callee(s.childNodes[r],t);p.push({event:"stop",offset:t,node:s.childNodes[r]})}}}}return t})(q,0);return p}function k(y,w,x){var q=0;var z="";var s=[];function u(){if(y.length&&w.length){if(y[0].offset!=w[0].offset){return(y[0].offset<w[0].offset)?y:w}else{return w[0].event=="start"?y:w}}else{return y.length?y:w}}function t(D){var A="<"+D.nodeName.toLowerCase();for(var B=0;B<D.attributes.length;B++){var C=D.attributes[B];A+=" "+C.nodeName.toLowerCase();if(C.value!==undefined&&C.value!==false&&C.value!==null){A+='="'+m(C.value)+'"'}}return A+">"}while(y.length||w.length){var v=u().splice(0,1)[0];z+=m(x.substr(q,v.offset-q));q=v.offset;if(v.event=="start"){z+=t(v.node);s.push(v.node)}else{if(v.event=="stop"){var p,r=s.length;do{r--;p=s[r];z+=("</"+p.nodeName.toLowerCase()+">")}while(p!=v.node);s.splice(r,1);while(r<s.length){z+=t(s[r]);r++}}}}return z+m(x.substr(q))}function j(){function q(x,y,v){if(x.compiled){return}var u;var s=[];if(x.k){x.lR=f(y,x.l||hljs.IR,true);for(var w in x.k){if(!x.k.hasOwnProperty(w)){continue}if(x.k[w] instanceof Object){u=x.k[w]}else{u=x.k;w="keyword"}for(var r in u){if(!u.hasOwnProperty(r)){continue}x.k[r]=[w,u[r]];s.push(r)}}}if(!v){if(x.bWK){x.b="\\b("+s.join("|")+")\\s"}x.bR=f(y,x.b?x.b:"\\B|\\b");if(!x.e&&!x.eW){x.e="\\B|\\b"}if(x.e){x.eR=f(y,x.e)}}if(x.i){x.iR=f(y,x.i)}if(x.r===undefined){x.r=1}if(!x.c){x.c=[]}x.compiled=true;for(var t=0;t<x.c.length;t++){if(x.c[t]=="self"){x.c[t]=x}q(x.c[t],y,false)}if(x.starts){q(x.starts,y,false)}}for(var p in e){if(!e.hasOwnProperty(p)){continue}q(e[p].dM,e[p],true)}}function d(B,C){if(!j.called){j();j.called=true}function q(r,M){for(var L=0;L<M.c.length;L++){if((M.c[L].bR.exec(r)||[null])[0]==r){return M.c[L]}}}function v(L,r){if(D[L].e&&D[L].eR.test(r)){return 1}if(D[L].eW){var M=v(L-1,r);return M?M+1:0}return 0}function w(r,L){return L.i&&L.iR.test(r)}function K(N,O){var M=[];for(var L=0;L<N.c.length;L++){M.push(N.c[L].b)}var r=D.length-1;do{if(D[r].e){M.push(D[r].e)}r--}while(D[r+1].eW);if(N.i){M.push(N.i)}return f(O,M.join("|"),true)}function p(M,L){var N=D[D.length-1];if(!N.t){N.t=K(N,E)}N.t.lastIndex=L;var r=N.t.exec(M);return r?[M.substr(L,r.index-L),r[0],false]:[M.substr(L),"",true]}function z(N,r){var L=E.cI?r[0].toLowerCase():r[0];var M=N.k[L];if(M&&M instanceof Array){return M}return false}function F(L,P){L=m(L);if(!P.k){return L}var r="";var O=0;P.lR.lastIndex=0;var M=P.lR.exec(L);while(M){r+=L.substr(O,M.index-O);var N=z(P,M);if(N){x+=N[1];r+='<span class="'+N[0]+'">'+M[0]+"</span>"}else{r+=M[0]}O=P.lR.lastIndex;M=P.lR.exec(L)}return r+L.substr(O,L.length-O)}function J(L,M){if(M.sL&&e[M.sL]){var r=d(M.sL,L);x+=r.keyword_count;return r.value}else{return F(L,M)}}function I(M,r){var L=M.cN?'<span class="'+M.cN+'">':"";if(M.rB){y+=L;M.buffer=""}else{if(M.eB){y+=m(r)+L;M.buffer=""}else{y+=L;M.buffer=r}}D.push(M);A+=M.r}function G(N,M,Q){var R=D[D.length-1];if(Q){y+=J(R.buffer+N,R);return false}var P=q(M,R);if(P){y+=J(R.buffer+N,R);I(P,M);return P.rB}var L=v(D.length-1,M);if(L){var O=R.cN?"</span>":"";if(R.rE){y+=J(R.buffer+N,R)+O}else{if(R.eE){y+=J(R.buffer+N,R)+O+m(M)}else{y+=J(R.buffer+N+M,R)+O}}while(L>1){O=D[D.length-2].cN?"</span>":"";y+=O;L--;D.length--}var r=D[D.length-1];D.length--;D[D.length-1].buffer="";if(r.starts){I(r.starts,"")}return R.rE}if(w(M,R)){throw"Illegal"}}var E=e[B];var D=[E.dM];var A=0;var x=0;var y="";try{var s,u=0;E.dM.buffer="";do{s=p(C,u);var t=G(s[0],s[1],s[2]);u+=s[0].length;if(!t){u+=s[1].length}}while(!s[2]);if(D.length>1){throw"Illegal"}return{r:A,keyword_count:x,value:y}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:m(C)}}else{throw H}}}function g(t){var p={keyword_count:0,r:0,value:m(t)};var r=p;for(var q in e){if(!e.hasOwnProperty(q)){continue}var s=d(q,t);s.language=q;if(s.keyword_count+s.r>r.keyword_count+r.r){r=s}if(s.keyword_count+s.r>p.keyword_count+p.r){r=p;p=s}}if(r.language){p.second_best=r}return p}function i(r,q,p){if(q){r=r.replace(/^((<[^>]+>|\t)+)/gm,function(t,w,v,u){return w.replace(/\t/g,q)})}if(p){r=r.replace(/\n/g,"<br>")}return r}function n(t,w,r){var x=h(t,r);var v=a(t);var y,s;if(v){y=d(v,x)}else{return}var q=c(t);if(q.length){s=document.createElement("pre");s.innerHTML=y.value;y.value=k(q,c(s),x)}y.value=i(y.value,w,r);var u=t.className;if(!u.match("(\\s|^)(language-)?"+v+"(\\s|$)")){u=u?(u+" "+v):v}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){s=t.parentNode;var p=document.createElement("div");p.innerHTML="<pre><code>"+y.value+"</code></pre>";t=p.firstChild.firstChild;p.firstChild.cN=s.cN;s.parentNode.replaceChild(p.firstChild,s)}else{t.innerHTML=y.value}t.className=u;t.result={language:v,kw:y.keyword_count,re:y.r};if(y.second_best){t.second_best={language:y.second_best.language,kw:y.second_best.keyword_count,re:y.second_best.r}}}function o(){if(o.called){return}o.called=true;var r=document.getElementsByTagName("pre");for(var p=0;p<r.length;p++){var q=b(r[p]);if(q){n(q,hljs.tabReplace)}}}function l(){if(window.addEventListener){window.addEventListener("DOMContentLoaded",o,false);window.addEventListener("load",o,false)}else{if(window.attachEvent){window.attachEvent("onload",o)}else{window.onload=o}}}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=n;this.initHighlighting=o;this.initHighlightingOnLoad=l;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="\\b(0[xX][a-fA-F0-9]+|(\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.ER="(?![\\s\\S])";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(r,s){var p={};for(var q in r){p[q]=r[q]}if(s){for(var q in s){p[q]=s[q]}}return p}}();hljs.LANGUAGES.cpp=function(){var a={keyword:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,virtual:1,operator:2,sizeof:2,dynamic_cast:2,typedef:2,const_cast:2,"const":1,struct:1,"for":1,static_cast:2,union:1,namespace:1,unsigned:1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,bool:1,template:1,mutable:1,"if":1,"public":1,friend:2,"do":1,"return":1,"goto":1,auto:1,"void":2,"enum":1,"else":1,"break":1,"new":1,extern:1,using:1,"true":1,"class":1,asm:1,"case":1,typeid:1,"short":1,reinterpret_cast:2,"default":1,"double":1,register:1,explicit:1,signed:1,typename:1,"try":1,"this":1,"switch":1,"continue":1,wchar_t:1,inline:1,"delete":1,alignof:1,char16_t:1,char32_t:1,constexpr:1,decltype:1,noexcept:1,nullptr:1,static_assert:1,thread_local:1,restrict:1,_Bool:1,complex:1},built_in:{std:1,string:1,cin:1,cout:1,cerr:1,clog:1,stringstream:1,istringstream:1,ostringstream:1,auto_ptr:1,deque:1,list:1,queue:1,stack:1,vector:1,map:1,set:1,bitset:1,multiset:1,multimap:1,unordered_set:1,unordered_map:1,unordered_multiset:1,unordered_multimap:1,array:1,shared_ptr:1}};return{dM:{k:a,i:"</",c:[hljs.CLCM,hljs.CBLCLM,hljs.QSM,{cN:"string",b:"'\\\\?.",e:"'",i:"."},{cN:"number",b:"\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)"},hljs.CNM,{cN:"preprocessor",b:"#",e:"$"},{cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:a,r:10,c:["self"]}]}}}();hljs.LANGUAGES.r={dM:{c:[hljs.HCM,{cN:"number",b:"\\b0[xX][0-9a-fA-F]+[Li]?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+(?:[eE][+\\-]?\\d*)?L\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\b\\d+\\.(?!\\d)(?:i\\b)?",e:hljs.IMMEDIATE_RE,r:1},{cN:"number",b:"\\b\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"number",b:"\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"keyword",b:"(?:tryCatch|library|setGeneric|setGroupGeneric)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\.",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\.\\.\\d+(?![\\w.])",e:hljs.IMMEDIATE_RE,r:10},{cN:"keyword",b:"\\b(?:function)",e:hljs.IMMEDIATE_RE,r:2},{cN:"keyword",b:"(?:if|in|break|next|repeat|else|for|return|switch|while|try|stop|warning|require|attach|detach|source|setMethod|setClass)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"literal",b:"(?:NA|NA_integer_|NA_real_|NA_character_|NA_complex_)\\b",e:hljs.IMMEDIATE_RE,r:10},{cN:"literal",b:"(?:NULL|TRUE|FALSE|T|F|Inf|NaN)\\b",e:hljs.IMMEDIATE_RE,r:1},{cN:"identifier",b:"[a-zA-Z.][a-zA-Z0-9._]*\\b",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"<\\-(?!\\s*\\d)",e:hljs.IMMEDIATE_RE,r:2},{cN:"operator",b:"\\->|<\\-",e:hljs.IMMEDIATE_RE,r:1},{cN:"operator",b:"%%|~",e:hljs.IMMEDIATE_RE},{cN:"operator",b:">=|<=|==|!=|\\|\\||&&|=|\\+|\\-|\\*|/|\\^|>|<|!|&|\\||\\$|:",e:hljs.IMMEDIATE_RE,r:0},{cN:"operator",b:"%",e:"%",i:"\\n",r:1},{cN:"identifier",b:"`",e:"`",r:0},{cN:"string",b:'"',e:'"',c:[hljs.BE],r:0},{cN:"string",b:"'",e:"'",c:[hljs.BE],r:0},{cN:"paren",b:"[[({\\])}]",e:hljs.IMMEDIATE_RE,r:0}]}};
hljs.initHighlightingOnLoad();
</script>




</head>

<body>
<h1>Spatial data in R: Using R as a GIS     </h1>

<p>A tutorial to perform basic operations with spatial data in R, such as importing and exporting data (both vectorial and raster), plotting, analysing and making maps.</p>

<p><a href="http://sites.google.com/site/rodriguezsanchezf">Francisco Rodriguez-Sanchez</a> </p>

<p>v 2.1  </p>

<p>18-12-2013 </p>

<p>Check out code and latest version at <a href="https://github.com/Pakillo/R-GIS-tutorial/blob/master/R-GIS_tutorial.md">GitHub</a></p>

<p><br>
<br>
<br></p>

<h1>CONTENTS <a name="contents"></a></h1>

<p><br>
<br></p>

<p><a href="#intro">1. INTRODUCTION</a>
<br>
<br></p>

<p><a href="#mapping">2. GENERIC MAPPING</a>
<br></p>

<ul>
<li><p><a href="#gmap">Retrieving base maps from Google with <code>gmap</code> function in package <code>dismo</code></a></p></li>
<li><p><a href="#rgooglemaps"><code>RgoogleMaps</code>: Map your data onto Google Map tiles</a></p></li>
<li><p><a href="#googlevis"><code>googleVis</code>: visualise data in a web browser using Google Visualisation API</a></p></li>
<li><p><a href="#rworldmap"><code>RWorldMap</code>: mapping global data</a>
<br>
<br></p></li>
</ul>

<p><a href="#vector">3. SPATIAL VECTOR DATA (points, lines, polygons)</a>
<br></p>

<ul>
<li><p><a href="#gbif">Example dataset: retrieve point occurrence data from GBIF</a></p></li>
<li><p><a href="#spatial">Making data &#39;spatial&#39;</a></p></li>
<li><p><a href="#projection">Define spatial projection</a></p></li>
<li><p><a href="#plot">Quickly plotting point data on a map</a></p></li>
<li><p><a href="#subset">Subsetting and mapping again</a></p></li>
<li><p><a href="#mapvector">Mapping vectorial data (points, polygons, polylines)</a></p></li>
<li><p><a href="#digitise">Drawing polygons and polylines (e.g. for digitising)</a></p></li>
<li><p><a href="#iovec">Converting between formats, reading in, and saving spatial vector data</a></p></li>
<li><p><a href="#changeproj">Changing projection of spatial vector data</a>
<br>
<br></p></li>
</ul>

<p><a href="#raster">4. USING RASTER (GRID) DATA</a>
<br></p>

<ul>
<li><p><a href="#getdata">Downloading raster climate data from internet</a></p></li>
<li><p><a href="#loadraster">Loading a raster layer</a></p></li>
<li><p><a href="#rasterstack">Creating a raster stack</a></p></li>
<li><p><a href="#rasterbrick">Raster bricks</a></p></li>
<li><p><a href="#cropraster">Crop rasters</a></p></li>
<li><p><a href="#projectionraster">Define spatial projection of the rasters</a></p></li>
<li><p><a href="#changeprojraster">Changing projection</a></p></li>
<li><p><a href="#plotraster">Plotting raster data</a></p></li>
<li><p><a href="#autocorrelation">Spatial autocorrelation</a></p></li>
<li><p><a href="#extract">Extract values from raster</a></p></li>
<li><p><a href="#rasterize">Rasterize vector data (points, lines or polygons)</a></p></li>
<li><p><a href="#resolution">Changing raster resolution</a></p></li>
<li><p><a href="#interpolation">Spline interpolation</a></p></li>
<li><p><a href="#spatialsync">Setting all rasters to the same extent, projection and resolution all in one</a></p></li>
<li><p><a href="#elevation">Elevations, slope, aspect, etc</a></p></li>
<li><p><a href="#saveraster">Saving and exporting raster data</a>
<br>
<br></p></li>
</ul>

<p><a href="#spatstats">5. SPATIAL STATISTICS</a>
<br></p>

<ul>
<li><p><a href="#pointpatterns">Point pattern analysis</a></p></li>
<li><p><a href="#geostatistics">Geostatistics</a>
<br> 
<br></p></li>
</ul>

<p><a href="#othergis">6. INTERACTING WITH OTHER GIS</a>
<br>
<br></p>

<p><a href="#otherpackages">7. OTHER USEFUL PACKAGES</a>
<br>
<br></p>

<p><a href="#tolearnmore">8. TO LEARN MORE</a></p>

<p><br>
<br>
<br>
<br></p>

<h1>1. INTRODUCTION <a name="intro"></a></h1>

<p><br></p>

<p>R is great not only for doing statistics, but also for many other tasks, including GIS analysis and working with spatial data. For instance, R is capable of doing wonderful maps such as <a href="http://spatialanalysis.co.uk/wp-content/uploads/2012/02/bike_ggplot.png">this</a> or <a href="http://oscarperpinan.github.io/spacetime-vis/images/airMadrid_stamen.png">this</a>. In this tutorial I will show some basic GIS functionality in R.</p>

<h4>Basic packages</h4>

<pre><code class="r">
library(sp)  # classes for spatial data
library(raster)  # grids, rasters
library(rasterVis)  # raster visualisation
library(maptools)
library(rgeos)
# and their dependencies
</code></pre>

<p>There are many other useful packages, e.g. check <a href="http://cran.r-project.org/web/views/Spatial.html">CRAN Spatial Task View</a>. Some of them will be used below.</p>

<p><br>
<a href="#contents">Back to Contents</a>
<br>
<br>
<br>
<br></p>

<h1>2. GENERIC MAPPING <a name="mapping"></a></h1>

<p><br></p>

<h2>Retrieving base maps from Google with <code>gmap</code> function in package <code>dismo</code> <a name="gmap"></a></h2>

<p>Some examples:</p>

<p>Getting maps for countries:</p>

<pre><code class="r">
library(dismo)

mymap &lt;- gmap(&quot;France&quot;)  # choose whatever country
plot(mymap)
</code></pre>

<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfgAAAH4CAMAAACR9g9NAAAABlBMVEX9/v39/v17TDFfAAAAAnRSTlP/AOW3MEoAAAAJcEhZcwAACxIAAAsSAdLdfvwAAASISURBVHic7dExDQAACMAw8G8aGRxrFSzZLEnzHcAP46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzI+yvgo46OMjzqVy+BudrHIxgAAAABJRU5ErkJggg==" alt="plot of chunk gmap1"/> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfgAAAH4CAMAAACR9g9NAAAC61BMVEX9/v0AAAAHCQsICAcMDAsNDxIOEAwOERUQEQ4TFBMXGRUXGyAYGhYZGRgdIyseIRohIh0iIyEkKzEmKiApKSQsNT0sNUAtMiYuLisyNyo1OTE2Q1M4OTQ9PTk9QzM9SFRAQjhCSjdFSUFFSztFVTVHRkNJTT5JT1VKUT5NVEFNXnRQV0RRWW1SVkhVZUVWXkhXa4VaYk5bbYNccIldbX1fdZBhZV1hdYljcVlka1VkdoZkepdldVFpbVxpclppe4xpgaBsf5BshJ9tcWVtfFlvg5Vxf19xgGVxhJRxhZhzf2l1eXF2iZx4hGV4lLl6msx8kaZ8k6t9i5l9jWl/mbiAlqqBjWyCmK2DlKSDm7GEj5qEkp+Fi3OFlHSFlWmIoLaJs/eKlXiKnrGLpLuMnKuNmX2NrtqNs+SNs+mOmaWOnXaPjIaPqL+RloGRoXmRs9uRs+GSoYSSp7qSs9eTrcWUmoWUnKeUobOVs9GVs9eWl42WscqWs82WuN6YqLeYssuYs8yZpbGaq4Kbrb+cn5Gdq42ds42dvNedvOSeoZKiutCjtMSkqJmks4ukuImkwN2ouI2ouK+owNGpu5OquMaqusirs5Wrs6GrvKSrxNquwJWvzN2ztqWzvKuzwZazwpuzyNO2uJ63w9C4wpu4yKu4yMi4zLy5ypy6xKK6xtG7yqK8zNO8zNy80+y/0afAx83AydHAy6PA0ODA07PA2qHB07rCzKjC06PD06rEyLzE0t/E08TE18zI1aTI2a7I2qTI2qnI2uzI3avJ1azL1rPL1uDM07nM083M18TM2OTM2qvM2q/M2rPM3avM3a/N27jO4K/O4LPP1NjQ16/Q17jR2+TR3LPR4LPS3LnT2q7T2szT3cDU4LnX4cDX5PPX7LzZ3eHa3bza4bza5NPb4ebb4sHd5Ovd6MHd6Mjg5MTg5Mjg5+3g6MTh6cvk6dTo7O/p6tvs7vDs8+Dt8PLx8/Xx9On3+/P9/v3+/v6KtHagAAAA+XRSTlP/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AP9HlWu5AAAACXBIWXMAAAsSAAALEgHS3X78AAAgAElEQVR4nOy9zW8bR7Y3/BDwNrusDHuT9UWW+Qf8AO8AXt71feFNYK1GfOCF7UEIDALkERcxOJEBexjCNgGFksCGF6TB7jJIUbSr0CLYzW4Zt9Fdl6x24BYKNAk2QQiQXy7fc6pJfVlyMrZmMkDSifVBURS7fnXO+Z3P+l//3x/X7/L6X7/1G/jj+m2uP4D/nV5/AP87vf4A/nd6/QH87/T6A/jf6fUH8L/T6w/gf6fXH8D/Tq8/gP+dXn8A/zu9/gD+d3r9Afzv9PoD+N/p9Qfwv9PrD+B/p9cfwP9OrzOB/+svXt8cu+4k191by8sZM6wI/ufNoVyL134oUG/twdLSUn1rgxJfikgMfEppeTW9fOJK56QUfNCmb95UvE2d+gZ13fJk8vD695PJ5NH3sRx9bx48fCil/K/v45F8+Jfn8TR++PXzhw8nuflr3b2bvIvFm/rlW/inXceX5e5dfHM5mc5R2iJGi+4S4lDXTC/Nr6pWL7rcZnDV01o9ffwqepxy05yv0q1bt+7eXdzm2VfbZJQy+vybU9fFAX/iZe8sbjGzXGQ6oaRMeeWxT5c4XZsc5NNLtkPtshD+IIpEYAWbufQp5LWRx4WU9aGkFc+jkU85IX0AN5a8N4ljEU/2DybTKZcjuOJ4MpWenMI16e3MX+s08L8h8u8Dv6wB8K2WYXSMLrEsIUh6KSt7gPvNmzcL2X6bM87rmfSOdhz3fN6jLuGwb+bA/wLu33xTND0QLFr6ZwF/8lUXAn93eaVYotQwmveZpJGolzT5bjZlPY12Lfojp3QgIxlZdDPezJ1E3pTM5yIsRqLyLWOb1Kc9qjPXFJzYos0oLBVI+7BPVi1/C+4sjjnnErZF34znL3Xr3wf4v54GvgpKTQPg4TIo7bb8Ri6bK0iZR+BzmXw6A2Lf1tJ5Xjwh8RmT2YStaNXMIfAfxP2bb1Y1j1Fv5V8C/JGi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
Download .txt
gitextract_iwufr4h5/

├── .gitattributes
├── .gitignore
├── R-GIS_tutorial.Rmd
├── R-GIS_tutorial.md
├── README.md
└── index.html
Condensed preview — 6 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,789K chars).
[
  {
    "path": ".gitattributes",
    "chars": 59,
    "preview": "*.html linguist-detectable=false\n*.Rmd linguist-language=R\n"
  },
  {
    "path": ".gitignore",
    "chars": 654,
    "preview": ".Rproj.user\n.Rhistory\n.RData\n36.1.-5.65.png\n36.1.-5.65.png.rda\n53.086.-2.31.png\n53.086.-2.31.png.rda\nESP2_msk_alt.grd\nES"
  },
  {
    "path": "R-GIS_tutorial.Rmd",
    "chars": 24632,
    "preview": "\nSpatial data in R: Using R as a GIS     \n========================================================\n\n\nA tutorial to perfo"
  },
  {
    "path": "R-GIS_tutorial.md",
    "chars": 73121,
    "preview": "\nSpatial data in R: Using R as a GIS     \n========================================================\n\n\nA tutorial to perfo"
  },
  {
    "path": "README.md",
    "chars": 551,
    "preview": "\nSpatial data in R: Using R as a GIS     \n========================================================\n\n\nA tutorial to perfo"
  },
  {
    "path": "index.html",
    "chars": 2673951,
    "preview": "<!DOCTYPE html>\n<!-- saved from url=(0014)about:internet -->\n<html>\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text"
  }
]

About this extraction

This page contains the full source code of the Pakillo/R-GIS-tutorial GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6 files (2.6 MB), approximately 693.5k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!