Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/MilesMcBain/slippymath
R functions for dealing with slippy map tile servers.
https://github.com/MilesMcBain/slippymath
google-maps mapbox osm r slippy-map
Last synced: 3 months ago
JSON representation
R functions for dealing with slippy map tile servers.
- Host: GitHub
- URL: https://github.com/MilesMcBain/slippymath
- Owner: MilesMcBain
- License: other
- Created: 2018-11-06T06:55:30.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-07-16T02:55:46.000Z (over 5 years ago)
- Last Synced: 2024-07-11T17:42:40.367Z (4 months ago)
- Topics: google-maps, mapbox, osm, r, slippy-map
- Language: R
- Homepage:
- Size: 2.13 MB
- Stars: 65
- Watchers: 6
- Forks: 4
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# slippymath
[![Travis build status](https://travis-ci.org/MilesMcBain/slippymath.svg?branch=master)](https://travis-ci.org/MilesMcBain/slippymath) [![AppVeyor build status](https://ci.appveyor.com/api/projects/status/github/MilesMcBain/slippymath?branch=master&svg=true)](https://ci.appveyor.com/project/MilesMcBain/slippymath) [![lifecycle](https://img.shields.io/badge/lifecycle-maturing-blue.svg)](https://www.tidyverse.org/lifecycle/#maturing) [![CRAN status](https://www.r-pkg.org/badges/version/slippymath)](https://cran.r-project.org/package=slippymath)R functions for dealing with slippy map tile servers (Google maps, Open Street
Map, Mapbox, Stamen et. al.)The goal of this package is to take a bunch of logic that was lying around in
defunct packages and obscure wikis and make it #rstats cannon in a way that is
decoupled from any particular tile service or visualisation front end. Happy
mapping!# Installation
```r
## Dev version
remotes::install_github("milesmcbain/slippymath")## CRAN version
install.packages('slippymath')
```# Usage
## Tile maths
Look at how many tiles you might need:
```r
library(sf)uluru_bbox <-
st_bbox(c(xmin = 131.02084,
xmax = 131.0535,
ymin = -25.35461,
ymax = -25.33568),
crs = st_crs("+proj=longlat +ellps=WGS84"))bbox_tile_query(uluru_bbox)
# A tibble: 17 x 8
# x_min y_min x_max y_max y_dim x_dim total_tiles zoom
#
# 1 3 2 3 2 1 1 1 2
# 2 6 4 6 4 1 1 1 3
# 3 13 9 13 9 1 1 1 4
# 4 27 18 27 18 1 1 1 5
# 5 55 36 55 36 1 1 1 6
# 6 110 73 110 73 1 1 1 7
# 7 221 146 221 146 1 1 1 8
# 8 442 293 442 293 1 1 1 9
# 9 884 586 884 586 1 1 1 10
#10 1769 1173 1769 1173 1 1 1 11
#11 3538 2346 3539 2346 1 2 2 12
#12 7077 4692 7078 4692 1 2 2 13
#13 14154 9384 14156 9385 2 3 6 14
#14 28309 18769 28312 18771 3 4 12 15
#15 56619 37538 56625 37542 5 7 35 16
#16 113239 75076 113251 75084 9 13 117 17
#17 226478 150153 226502 150168 16 25 400 18
```Get a grid of slippy map tile coordinates for a bounding box, given a `zoom`, or
guess a zoom given a `max_tiles`:```r
bbox_to_tile_grid(uluru_bbox, max_tiles = 15)#$tiles
# x y
#1 28309 18769
#2 28310 18769
#3 28311 18769
#4 28312 18769
#5 28309 18770
#6 28310 18770
#7 28311 18770
#8 28312 18770
#9 28309 18771
#10 28310 18771
#11 28311 18771
#12 28312 18771
#
#$zoom
#[1] 15
#
#attr(,"class")
#[1] "tile_grid"
```Fetch a grid using your favourite tile server API. Creep on many tile providers [here](http://leaflet-extras.github.io/leaflet-providers/preview/).
Here's a Mapbox example:
```r
library(purrr)
library(curl)
library(glue)tile_grid <- bbox_to_tile_grid(uluru_bbox, max_tiles = 15)
mapbox_query_string <-
paste0("https://api.mapbox.com/v4/mapbox.satellite/{zoom}/{x}/{y}.jpg90",
"?access_token=",
Sys.getenv("MAPBOX_API_KEY"))images <-
pmap(tile_grid$tiles,
function(x, y, zoom){
outfile <- glue("{x}_{y}.jpg")
curl_download(url = glue(mapbox_query_string),
destfile = outfile)
outfile
},
zoom = tile_grid$zoom)```
## Tile compositing
You can compose a list of images and a corresponding tile grid to a spatially
referenced raster, meaning you can plot over it with `tmap` etc.```r
library(raster)
library(rgdal)raster_out <- compose_tile_grid(tile_grid, images)
## A convenient wrapper for raster image exports using png::writePNG.
raster_to_png(raster_out, "uluru.png")```
Result:
![](inst/media/uluru.png)