1 Mapping with leaflet + R
1.1 Markers
利用经纬度坐标来标记地图上的点。可以输入的类型包括
SpatialPoints
orSpatialPointsDataFrame
objects (from thesp
package)POINT
,sfc_POINT
, andsf
objects (from thesf
package); onlyX
andY
dimensions will be considered- Two-column numeric matrices (first column is longitude, second is latitude)
- Data frame with latitude and logitude columns. You can explicitly tell the marker function which columns contain the coordinate data (e.g.
addMarkers(lng = ~Longitude, lat = ~Latitude)
), or let the function look for columns namedlat
/latitude
andlon
/lng
/long
/longitude
(case insensitive). - Simply provide numeric vectors as
lng
andlat
arguments
一个简单的实例
library(leaflet)
data(quakes)
head(quakes)
## lat long depth mag stations
## 1 -20.42 181.62 562 4.8 41
## 2 -20.62 181.03 650 4.2 15
## 3 -26.00 184.10 42 5.4 43
## 4 -17.97 181.66 626 4.1 19
## 5 -20.42 181.96 649 4.0 11
## 6 -19.68 184.31 195 4.0 12
# Show first 20 rows from the `quakes` dataset
leaflet(data = quakes[1:20,]) %>% addTiles() %>%
addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag))
Marker Clusters
leaflet(quakes) %>% addTiles() %>% addMarkers(
clusterOptions = markerClusterOptions()
)
1.2 Points
leaflet(quakes) %>% addTiles() %>% addCircleMarkers()
## Assuming 'long' and 'lat' are longitude and latitude, respectively
Or customize their color, radius, stroke, opacity, etc.
# Create a palette that maps factor levels to colors
pal <- colorFactor(c("navy", "red"), domain = c("ship", "pirate"))
quakes$type <- factor(ifelse(runif(nrow(quakes)) > 0.75, "pirate", "ship"),c("ship", "pirate"))
leaflet(quakes) %>% addTiles() %>%
addCircleMarkers(
radius = ~ifelse(type == "ship", 6, 10),
color = ~pal(type),
stroke = FALSE, fillOpacity = 0.5
)
aqi <- read.csv("data/aqi.csv")
pal <- colorQuantile("YlOrRd", NULL, n=5)
leaflet(aqi) %>% addTiles()%>%
addCircleMarkers(~lon, ~lat , popup=aqi$PM25,
radius = log2(aqi$PM25),
stroke = FALSE, fillOpacity = 0.8,
color= ~pal(AQI))
1.3 Lines
# install.packages("sf")
library(sf)
china <- read_sf("data/china.shp")
plot(china)
leaflet(data = china) %>%
addTiles() %>%
addPolylines()
1.4 Polygon
china$id <- as.numeric(china$id)
china$id <- rnorm(n = nrow(china), mean = 100, sd = 5)
leaflet(data = china) %>%
addTiles() %>%
addPolygons(fillColor = ~colorQuantile("YlOrRd", id)(id),
color = "#444444", weight = 1, smoothFactor = 0.5,
opacity = 1.0, fillOpacity = 0.7,
highlightOptions = highlightOptions(color = "white", weight = 2,
bringToFront = TRUE))
1.5 Raster
# install.packages("raster")
library(raster)
r <- raster("data/oisst-sst.nc")
pal <- colorNumeric(c("#0C2C84", "#41B6C4", "#FFFFCC"), values(r),
na.color = "transparent")
leaflet() %>% addTiles() %>%
addRasterImage(r, colors = pal, opacity = 0.8) %>%
addLegend(pal = pal, values = values(r),
title = "Surface temp")