Species occurrence data to CartoDB
Creators
We have previously written about creating interactive maps on the web from R, with the interactive maps on Github. See here, here, here, and here.
A different approach is to use CartoDB, a freemium service with sql interface to your data tables that provides a map to visualize data in those tables. They released an R interace to their sql API on Github here - which we can use to make an interactive map from R.
We'll first get some data from GBIF, ~500 occurrences of Puma concolor in the US, then push that data to a CartoDB table. There are a couple more non-programmatic steps in this workflow than with pushing geojson file to Github as outlined in the previous linked above (i.e., going to the CartoDB site and making a visualization, and making it public).
Install packages
install.packages("devtools")library(devtools)install_github("rgbif", "ropensci", ref = "newapi")install_github("cartodb-r", "Vizzuality", subdir = "CartoDB")
Load em
library(rgbif)library(CartoDB)
Get some data from GBIF
Here, we'll get data for Puma concolor, the hello, world for biodiversity data.
key <- gbif_lookup(name = "Puma concolor", kingdom = "animals")$speciesKeydata <- occ_search(taxonKey = key, limit = 500, georeferenced = TRUE, country = "US", return = "data")head(data)
## name longitude latitude## 1 Puma concolor (Linnaeus, 1771) -108.9 32.70## 2 Puma concolor (Linnaeus, 1771) -108.0 32.88## 3 Puma concolor (Linnaeus, 1771) -105.5 32.95## 4 Puma concolor (Linnaeus, 1771) -107.8 33.61## 5 Puma concolor (Linnaeus, 1771) -107.5 33.00## 6 Puma concolor (Linnaeus, 1771) -106.5 36.69
str(data)
## 'data.frame': 500 obs. of 3 variables:## $ name : Factor w/ 7 levels "Animalia","Carnivora",..: 7 7 7 7 7 7 7 7 7 7 ...## $ longitude: num -109 -108 -105 -108 -107 ...## $ latitude : num 32.7 32.9 33 33.6 33 ...
Great, we have some data. Now let's make a map.
Push data up to CartoDB
I frist crated a table in my CartoDB account named
pumamap
. Then, I need to initialize the connection with
CartoDB with my account name and API key. Note that I am pulling up my
key from my .Rprofile file on my machine for ease and so it's not
revealed to you :)
key = getOption("mycartodbkey")cartodb("recology", api.key = key)
Now we need to push data to our pumamap
table using the
function cartodb.row.insert
. It accepts one row of data, so
we'll pass each row of data with an lapply
call.
rows <- apply(data, 1, as.list)lapply(rows, function(x) cartodb.row.insert(name = "pumamap", columns = list("name", "longitude", "latitude"), values = x))
After the upload is finished, I had to make sure the table was
georeferenced, and played with settings to suit my style. And then I
made a visualization from the pumamap
dataset and made it
public. And that's it! You can find the
map, and it can be embedded:
And we can examine a row from the table in our CartoDB account with a single line of code
cartodb.row.get(name = "pumamap", cartodb_id = 10)
## cartodb_id name description## 1 1 Puma concolor (Linnaeus, 1771) NULL## created_at updated_at## 1 2013-11-03T06:40:12+0100 2013-11-03T06:46:55+0100## the_geom the_geom_webmercator## 1 0101000020E610000089247A19C5365BC08C15359886594040 NULL## latitude longitude## 1 32.7 -108.9
Additional details
Description
We have previously written about creating interactive maps on the web from R, with the interactive maps on Github. See here, here, here, and here. A different approach is to use CartoDB, a freemium service with sql interface to your data tables that provides a map to visualize data in those tables.
Identifiers
- UUID
- ef38ac04-0579-43bb-96d0-e126b4be04b2
- GUID
- https://doi.org/10.59350/z7ycs-vgk43
- URL
- https://ropensci.org/blog/2013/11/04/data-to-cartodb
Dates
- Issued
-
2013-11-04T00:00:00Z
- Updated
-
2025-02-13T12:42:17Z