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")%>% |