訊息方塊

addPopups 可以在地圖上加入訊息方塊,其內容可以包涵任何的 HTML 程式碼:

content <- paste(sep = "<br/>",
  "<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>",
  "606 5th Ave. S",
  "Seattle, WA 98138"
)

leaflet() %>% addTiles() %>%
  addPopups(-122.327298, 47.597131, content,
    options = popupOptions(closeButton = FALSE)
  )
r-leaflet-interactive-map-package-tutorial-19

訊息方塊

訊息方塊最常見的用法就是配合地圖上的標示一同使用,當使用者點擊標示時,跳出對應的訊息:

library(htmltools)

df <- read.csv(textConnection(
"Name,Lat,Long
Samurai Noodle,47.597131,-122.327298
Kukai Ramen,47.6154,-122.327157
Tsukushinbo,47.59987,-122.326726"
))

leaflet(df) %>% addTiles() %>%
  addMarkers(~Long, ~Lat, popup = ~htmlEscape(Name))
r-leaflet-interactive-map-package-tutorial-20

訊息方塊

上面的 htmlEscape 是用來處理一些 HTML 的特殊字元的函數,可讓資料可以依照原本的樣子呈現在地圖上,在這個例子中可以將其省略,但在一般的狀況下最好都加入這個處理步驟,確保資料可以正確呈現。

線條與形狀

R 的 Leaflet 套件可以讓使用者在地圖上加入各種線條或形狀,其可接受的資料格式包含:

  • sp 套件的 SpatialPolygonsSpatialPolygonsDataFramePolygonPolygons
  • sp 套件的 SpatialLinesSpatialLinesDataFrameLinesLine
  • maps 套件的 map 物件(map(fill = TRUE) 代表多邊形,map(fill = FALSE) 代表折線)。
  • 兩個行(column)的矩陣,第一行為經度,第二行為緯度。若要包含多個多邊形,可以用 (NA, NA) 分隔。

多邊形

addPolygons 可加入多邊形:

Lat <- c(22.992, 22.982, 22.970, 22.990)
Long <- c(120.289, 120.299, 120.267, 120.267)
leaflet() %>% addTiles() %>% addPolygons(lng = Long, lat = Lat)
r-leaflet-interactive-map-package-tutorial-24

多邊形

以下是繪製美國幾個州範例,資料來源為美國人口普查局

library(rgdal)

states <- readOGR("census/cb_2015_us_state_20m.shp",
  layer = "cb_2015_us_state_20m", verbose = FALSE)

neStates <- subset(states, states$STUSPS %in% c(
  "CT","ME","MA","NH","RI","VT","NY","NJ","PA"
))

leaflet(neStates) %>%
  addPolygons(
    stroke = FALSE, fillOpacity = 0.5, smoothFactor = 0.5,
    color = ~colorQuantile("YlOrRd", states$AWATER)(AWATER)
  )
r-leaflet-interactive-map-package-tutorial-21

多邊形

圓圈

addCircles 可以在地圖上加上圓圈,其與 addCircleMarkers 類似,只是 addCircles 的半徑單位是實際的公尺,而 addCircleMarkers 的單位則是螢幕上的像素,所以 addCircles 的圓圈會依據地圖的縮放比例自動調整大小,而 addCircleMarkers 的圓圈大小則是固定的。

cities <- read.csv(textConnection("
City,Lat,Long,Pop
Boston,42.3601,-71.0589,645966
Hartford,41.7627,-72.6743,125017
New York City,40.7127,-74.0059,8406000
Philadelphia,39.9500,-75.1667,1553000
Pittsburgh,40.4397,-79.9764,305841
Providence,41.8236,-71.4222,177994
"))

leaflet(cities) %>% addTiles() %>%
  addCircles(lng = ~Long, lat = ~Lat, weight = 1,
    radius = ~sqrt(Pop) * 30, popup = ~City
  )
r-leaflet-interactive-map-package-tutorial-22

圓圈

矩形

addRectangles 可以在地圖上標示矩形的區域:

leaflet() %>% addTiles() %>%
  addRectangles(
    lng1=-118.456554, lat1=34.078039,
    lng2=-118.436383, lat2=34.062717,
    fillColor = "transparent"
  )
r-leaflet-interactive-map-package-tutorial-23

矩形