R可视化:使用leaflet绘制高德地图
前言
很多朋友说在R里没法使用高德地图,这里给出一个基于leaflet包的解决方法。当然,除了提供这个方法外,我还尝试对空间可视化的基础知识做一个简单的介绍。
R空间可视化基础
空间数据可视化,需要解决两个问题,一是怎么在R中表示空间数据,二是怎么在R中绘制空间数据/地图。sp包用于解决第一个问题,leaflet包用于解决第二个问题。
sp
空间数据最常用的格式是shp,主要由三个文件组成:shp文件用于存储位置几何信息,dbf文件用于存储attribute,shx用于存储位置几何信息与attribute的对照表。位置几何信息主要有以下几类:points,multipoints,lines,polygons等。对此sp包提供了SpatialPoints,SpatialMultiPoints,SpatialLines,SpatialPolygons等用于表示位置几何信息。attribute一般以表格形式存在,所以sp包用dataframe对齐进行表示,为前面提到的Spatial类添加dataframe后得到诸如SpatialPointsDataFrame,SpatialMutilPointsDataFrame,SpatialLinesDataFrame,SpatialPolygonsDataFrame等类。在这些类中,位置几何信息与attribute的对照关系通过Spatial类的ID与dataframe的rownames进行匹配得到。
假设现在有一个数据框lon_lat_df存储了道路的几何信息,如下:
link
Lng
Lat
道路1
116.3103
39.91814
道路1
116.3103
39.91961
道路1
116.3101
39.94624
道路2
116.3100
39.94694
道路2
116.3103
39.93921
另有一个数据框link_status存储了道路的attribute,如下:
link
realtime_status
道路1
畅通
道路1
拥堵
那么,将其转化为sp的SpatialLinesDataFrame的示例代码如下:
library(sp)
points2spline
leaflet
leaflet是一套完整的地图API工具,源代码是javascript。通过R包htmlwidget对javascript进行封装后,R的用户可以通过leaflet包生成可交互的地图。
leaflet使用高德地图的方法如下:
library(leaflet)
添加高德地图
m %
addTiles(
'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
tileOptions(tileSize=256, minZoom=9, maxZoom=17)
)
m
leaflet还可以方便地对sp对象进行绘制,我们继续上面的例子,将其绘制到高德地图上。
#########################
高德地图可视化
@author: shuiping.chen@alibaba-inc.com
@date: 2016-07-11
#########################
library(leaflet)
library(sp)
Sldf %
addTiles(
'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',
tileOptions(tileSize=256, minZoom=9, maxZoom=17),
group="高德地图"
) %>%
setView(116.40,39.90, zoom = 10) %>%
addPolylines(color=~factpal(realtime_status), weight=8,opacity=1, group="实时路况") %>%
addLayersControl(
overlayGroups = c("高德地图", "实时路况"),
options = layersControlOptions(collapsed = FALSE)
) %>%
addLegend("bottomleft", pal = factpal, values = ~realtime_status,
title = "实时交通",
opacity = 1
)
m
关键字:r, leaflet, 高德地图
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!