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, 高德地图


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部