訊息方塊
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) )
訊息方塊最常見的用法就是配合地圖上的標示一同使用,當使用者點擊標示時,跳出對應的訊息:
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))
上面的 htmlEscape
是用來處理一些 HTML 的特殊字元的函數,可讓資料可以依照原本的樣子呈現在地圖上,在這個例子中可以將其省略,但在一般的狀況下最好都加入這個處理步驟,確保資料可以正確呈現。
線條與形狀
R 的 Leaflet 套件可以讓使用者在地圖上加入各種線條或形狀,其可接受的資料格式包含:
sp
套件的SpatialPolygons
、SpatialPolygonsDataFrame
、Polygon
與Polygons
。sp
套件的SpatialLines
、SpatialLinesDataFrame
、Lines
與Line
。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)
以下是繪製美國幾個州範例,資料來源為美國人口普查局:
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) )
圓圈
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 )
矩形
addRectangles
可以在地圖上標示矩形的區域:
leaflet() %>% addTiles() %>% addRectangles( lng1=-118.456554, lat1=34.078039, lng2=-118.436383, lat2=34.062717, fillColor = "transparent" )