# R_leaflet包_最易上手地图教程（一）（下）

leaflet包相对其它地图包，有很多优点和缺点，

5.形状与线条

SpatialPolygons(), SpatialPolygonsDataFrame(),

Polygons()和Polygon()对象(来自sp包)

SpatialLines(), SpatialLinesDataFrame(), Lines(), 和Line()对象(来自sp包)

MULTIPOLYGON(), POLYGON(), MULTILINESTRING()和LINESTRING()对象(来自sp包)

map()对象(来自maps包)。

2列的矩阵，第1列为经度，第2列为纬度。多边形之间用(NA, NA)行分开。

5.1

circles形状

1library(leaflet)

2

4City,Lat,Long,Pop

5Boston,42.3601,-71.0589,645966

6Hartford,41.7627,-72.6743,125017

7New York City,40.7127,-74.0059,8406000

9Pittsburgh,40.4397,-79.9764,305841

10Providence,41.8236,-71.4222,177994

11″))

12

13leaflet(cities) %>% addTiles() %>% addCircles(lng = ~Long, lat = ~Lat, weight = 1,

14 radius = ~sqrt(Pop) * 30, popup = ~City, fillColor = “magenta”, fillOpacity = 0.2)

5.2

Rectangles矩形

1library(leaflet)

2

4 lng2 = -118.436383, lat2 = 34.062717, fillColor = “transparent” # fillColor = ‘transparent’与fillColor = NULL结果不一样

5)

5.3

1addPolygons(map, lng = NULL, lat = NULL, layerId = NULL,

2 group = NULL, stroke = TRUE, color = “#03F”, weight = 5,

3 opacity = 0.5, fill = TRUE, fillColor = color, fillOpacity = 0.2,

4 dashArray = NULL, smoothFactor = 1, noClip = FALSE, popup = NULL,

5 popupOptions = NULL, label = NULL, labelOptions = NULL,

6 options = pathOptions(), highlightOptions = NULL,

7 data = getMapData(map))

stroke, 表示是否显示多边形的路径阴影。

color, 表示指定stroke的颜色。

weight, 表示指定stroke像素宽度。

smoothFactor, 表示指定多边形的polyLines(边线)简化因子。越大，则边缘约平滑。

opacity, 表示指定stroke透明度，opacity从0(完全透明)到1(完全不透明)

fillOpacity, 表示指定多边形fill透明度，opacity从0(完全透明)到1(完全不透明)

fillColor, 表示指定多边形fill填充颜色，

highlightOptions, 表示高亮鼠标所在区域的多边形。

5.3.1 highlightOptions()高亮多边形

1highlightOptions(stroke = NULL, color = NULL, weight = NULL,

2 opacity = NULL, fill = NULL, fillColor = NULL,

3 fillOpacity = NULL, dashArray = NULL, bringToFront = NULL,

4 sendToBack = NULL)

dashArray, 表示指定多边形stroke的线型，与Popup中用法一致。

bringToFront, 表示当鼠标悬浮在所在多边形区域时，

sendToBack, 表示当鼠标移走时，是否将高亮shape置于底层。

1library(leaflet)

2

3path <- “E:/R_input_output/data_input/cb_2013_us_state_20m/cb_2013_us_state_20m.shp”

5 GDAL1_integer64_policy = TRUE)# 读取数据

6

7neStates <- subset(states, states\$STUSPS %in% c(

8 “CT”,”ME”,”MA”,”NH”,”RI”,”VT”,”NY”,”NJ”,”PA”

9))

10

11leaflet(neStates) %>%

12 addPolygons(color = “cyan”, weight = 1, smoothFactor = 0.5,

13 opacity = 1.0, fillOpacity = 0.5,

14 fillColor = ~colorQuantile(“YlOrRd”, ALAND)(ALAND),

15 highlightOptions = highlightOptions(color = “white”, weight = 2, # 高亮形状区域，置于表层。

16 bringToFront = TRUE))

1## OGR data source with driver: ESRI Shapefile

2## Source: “E:R_input_outputdata_inputcb_2013_us_state_20mcb_2013_us_state_20m.shp”, layer: “cb_2013_us_state_20m”

3## with 52 features

4## It has 9 fields

5## Integer64 fields read as doubles: ALAND AWATER

5.3.2 简化polygons/polylines

albersusa包安装方式：devtools::install_github(“hrbrmstr/albersusa”)

1library(albersusa)

2

3fullsize <- usa_sf() # albersusa包自带数据

4object.size(fullsize) # object.size属于utils包，R自带

5

6simplified <- rmapshaper::ms_simplify(fullsize)

7object.size(simplified) # 可以看出，这种简化方式存储量只有原来1/8

1## 933016 bytes

2## 123920 bytes

6.GeoJSON与TopoJSON数据

6.1

GeoJSON格式与TopoJSON格式是不一样的。

**GeoJSON格式文件后缀是”.geojson“

TopoJSONg格式文件后缀是”.json“**。

Script中码代码可以输出为本地html文件。但是只能在一个html中输出一张图。

1library(leaflet)

2

3filepath <- “E:/R_input_output/data_input/China.geojson”

4

5leaflet() %>%

6 setView(lng = 106.33, lat = 29.35, zoom = 3.5) %>% # 以重庆城区经纬度为中心

9 weight = 1, color = “magenta”, fill = FALSE) # 修改color失败

1library(leaflet)

2

3filepath <- “E:/R_input_output/data_input/JSON/TopoJson/China.json”

4

5leaflet() %>%

6 setView(lng = 106.33, lat = 29.35, zoom = 3.5) %>% # 以重庆城区经纬度为中心

8 addTopoJSON(topojson = filepath, weight = 1,

9 color = “magenta”, fill = FALSE) # 修改color失败

6.2

sp对象

1library(leaflet)

2library(rgdal)

3

4filepath <- “E:/R_input_output/data_input/JSON/TopoJson/China.json”

5# filepath <- “E:/R_input_output/data_input/JSON/GeoJSON/China.geojson” # 结果一样

6China_map <- readOGR(filepath, stringsAsFactors = FALSE)

7# China_map <- geojsonio::geojson_read(filepath,what = “sp”) # 结果一样

8

9Encoding(China_map@data\$name) <- “UTF-8” # 纠正中文字符乱码

10leaflet(China_map) %>%

11 setView(lng = 106.33, lat = 29.35, zoom = 3.5) %>% # 以重庆城区经纬度为中心

12 addPolygons(stroke = TRUE, color = “magenta”, smoothFactor = 0.3,

13 fillOpacity = 0.5,fillColor = “lime”) %>%

14 addMarkers(lng = 114.3,lat = 30.6 ) # 增加一个图标

（图片太大，没截全）

6.3

1library(leaflet)

2library(jsonlite)

3

4filepath <- “E:/R_input_output/data_input/JSON/TopoJson/China.json”

5# filepath <- “E:/R_input_output/data_input/JSON/GeoJSON/China.geojson” # 结果一样

6

7# 首先解析JSON格式为stringified格式，再转化为多级列表

8China_map_list <- readLines(filepath, warn = FALSE) %>%

9 paste(collapse = “”) %>%

10 fromJSON(simplifyVector = FALSE) # 将JSON格式转化为多级列表

11

12# 插入style对象，增加子列表

13China_map_list\$style <- list(

14 weight = 1,

15 stroke = “TRUE”,

16 color = “magenta”,

17 fillColor = “lime”,

18 opacity = 0.5,

19 fillOpacity = 0.8

20)

21

22

23# 使用修改了style的JSON数据绘图

24leaflet() %>% setView(lng = 106.33, lat = 29.35, zoom = 3.5) %>% # 以重庆城区经纬度为中心

26 # addGeoJSON(China_map_list) %>% # 若读取China.geojson文件，

27 addMarkers(lng = 114.3,lat = 30.6 ) # 增加一个图标

（图片太大，没截全）

R语言自然语言处理：词性标注与命名实体识别

R语言中文社区2018年终文章整理（作者篇）

R语言中文社区2018年终文章整理（类型篇）