leaflet
Leaflet是一个用于交互式地图的开源JavaScript库。这个R包可以很容易地从R创建Leaflet地图。
语法:leaflet通过管道操作%>%叠加图层作图。
基本用法
您使用以下基本步骤创建Leaflet地图:
- 通过
leaflet()调用创建地图小部件。 - 通过使用层功能(例如,addTiles,addMarkers,addPolygons)添加层到地图,来修改窗口小部件的地图。
- 根据需要重复步骤2。
- 打印地图小部件以显示它。
library(leaflet) |
Map Widget:地图控件
Initialization (初始化)
| 函数 | 说明 |
|---|---|
| leaflet() | 标准函数 |
| center | Initial geographic center of the map |
| zoom | Initial map zoom level |
| minZoom | Minimum zoom level of themap |
| maxZoom | Maximum zoom level of thema |
leaflet(data = NULL,width = NULL, height = NULL, |
Map Methods (作图方法)
| 函数 | 说明 |
|---|---|
| setView(map,lng,lat,zoom, options = list()) ) | 设置地图视图的中心和缩放级别 |
| fitBounds(map, lng1, lat1, lng2, lat2) | 设定边界经纬度 |
| clearBounds(map) | 清除边界,从地图元素中自动设定 |
Data Object (数据对象)
leaflet()图层和map图层都有一个data参数,用来接收空间数据,data的格式如下:
- Base R : data.frame对象
df <-data.frame(lat = ..., lng= ... ) |
-
sp package library(sp) Useful functions
SpatialPoints, SpatialLines, SpatialPolygons, ... -
maps package library(maps)
mapStates <-map("state", fill = TRUE, plot = FALSE) |
示例
library(maps) |
Basemaps:底图
addTiles() 添加地图瓦片,默认OpenStreetMap图块
addProviderTiles(map, provider) 添加第三方图块
addWMSTiles() 添加WMS (Web Map Service) 图块
names(providers) : 查看所有第三方图块
参数provider = c(providers$Stamen.Toner, CartoDB.Positron, Esri.NatGeoWorldMap)
Markers:标记
接收经纬度坐标latitude/longitude ,标记出icons or circles,data数据来自向量或已赋值data.frame或sp对象。
1. Icon Markers
# 添加默认标记 |
addMarkers()参数:
icon, popup : 点击时要显示的消息
label : 鼠标静止时显示的信息
clusterOptions = markerClusterOptions() : 大量标记时集群显示选项
示例 1
# 默认markers |
示例 2
quakes1 <- quakes[1:10,] |
示例 3
leaflet(quakes) %>% addTiles() %>% addMarkers( |
2. Circle Markers
addCircleMarkers(map, color, radius, stroke, opacity, ... ) |
示例 4
# Create a palette that maps factor levels to colors |
Popups and Labels:弹出窗口和标签
addPopups(map, lng, lat, ...content..., options)#添加标准弹出窗口 |
示例
content <- paste(sep = "<br/>", |
Lines and Shapes:线条和几何形状
Polygons and Polylines
addPolygons(map, lng = NULL, lat = NULL , |
Circles and Rectangles
addCircles(map,lng = NULL,lat = NULL,radius = 10,...)# 圆形,半径以米为单位 |
示例
cities <- read.csv(textConnection(" |
其他组件
| 组件 | 说明 |
|---|---|
| addLegend() | 图例 |
| addMeasure() | 测量插件 |
| addGraticule() | 网格线 |
| addTerminator() | 日夜线 |
| addMiniMap() | 迷你地图 |
GeoJSON and TopoJSON
有两种方法来使用GeoJSON/TopoJSON data
- 使用geojsonio or rgdal package 读入sp 对象
geojsonio :: geojson_read (..., what =“ sp ”)
rgdal :: readOGR (...,“ OGRGeoJSON ”) - 使用本包 addGeoJSON() and addTopoJSON() 函数
addTopoJSON / addGeoJSON (... weight , color , fill , opacity , fillOpacity ... ) - 另外的包RJSONIO and jsonlite 也能很快解析
Shiny Integration
UI 部分:leafletOutput(“name”)
server 部分:renderLeaflet(…)
渲染:renderLeaflet () 返回Leaflet map 对象
修改
| 函数举例 | 在serve中修改 |
|---|---|
| leafletProxy() | 通用修改 |
| fitBounds(0, 0, 11, 11) | 配置边界 |
| addCircles(1:10, 1:10, layerId = LETTERS[1:10]) | 添加圆形 |
| removeShape(c(“B”, “F”)) | 移除形状 |
| clearShapes() | 清除形状 |
Inputs/Events
- 对象事件
input$MAPID_OBJCATEGORY_EVENTNAME抓取事件变化的值赋给shiny变量
OBJCATEGORY: marker, shape, geojson and topojson
EVENTNAME: click, mouseover and mouseout.
所有这些事件都被设为NULL或list(lat,lng,id)(被触发时)
- 地图事件
input$MAPID_click:地图背景或basemap被敲击时提供list(lat,lng)
input$MAPID_bounds:list(north,east,south,west)
input$MAPID_zoom:zoom level
leafletCN
leafletCN是一个基于leaflet的中国扩展包, 里面保存了一些适用于中国的区域划分数据以及一些有帮助的函数, 地理区划数据来源于github的[geojson-map-china][chinamap]项目. 数据细分到县级市.
[chinamap]: https://github.com/longwosion/geojson-map-china
自带地图数据(GeoJSON)
regionNames(mapName)返回地图的区域名,细分到县(world,china,city,…)
绘图(leaflet封装)
demomap (mapName) 传入地图名绘制地图,等同于(leaflet包, leaflet+addTiles +addPolygons)
示例
demomap("上海") |
geojsonMap(dat, mapName) 底图+填色地图,dat赋值data.frame(regions,values)
sh = regionNames("上海") |
辅助函数
amap(map)高德地图底图,方便leaflet包调用
read.geoShape(geojson) 读取一个geojson的对象,保存成sp对象
leafletGeo(mapName,dat = NULL) 用地图名和数据框把地图和数值组合在一起
system.file("geojson/china.json",package = "leafletCN")%>% |






















