本文来自读者厦门大学的李康国研究生投稿,讲述高德和 Leaflet 结合绘制地图。也欢迎其他小伙伴来分享你们的经验!
统计学上常说:“一图胜千言”,而对于地图类可视化教程,大家介绍的并不是很多,本教程讲会教你如何绘制各类地图。首先介绍下地图的种类(个人经验仅作参考):
本文框架
下面我会一一讲解如何获取这两类数据。
就拿今天讲的最简单的散点地图来说,需要通过经纬度来确定点的位置,然后再映射到地图上。
因为本教程为了适用性使用的是高德的底图(GCJ02坐标系),如果您是WGS84坐标系在后续代码中删除高德的底图就好(一定会面临主权问题);如果您是 BD-09 坐标系,这个需要转换且比较复杂。
简单的是自己去搜一下“坐标拾取”,然后借助百度地图等把地址转换成坐标,但是一次就只能拾取一个,并且频繁拾取还要验证码,如果地址比较多就太麻烦了。这时候可以使用高德提供的api进行批量查询地址对应的坐标。
address <- '福建省厦门市厦门北站' ## 详细地址
city <- '厦门'
key <- 'Your key' ## 你刚刚复制的key
url <- paste0(
'https://restapi.amap.com/v3/geocode/geo?',
'&key=', key, ## 你刚刚复制的key
'&address=', address, ## 详细地址
'&output=', 'JSON',
'&city=', city ## 这个可以不要,填所在城市就好
)
library(jsonlite)
temp_geo <- fromJSON(paste(readLines(url,warn = F, encoding = 'UTF-8'), collapse = ""))
temp_geo
## $status
## [1] "1"
##
## $info
## [1] "OK"
##
## $infocode
## [1] "10000"
##
## $count
## [1] "1"
##
## $geocodes
## formatted_address country province citycode city district township
## 1 福建省厦门市集美区厦门北站 中国 福建省 0592 厦门市 集美区 NULL
## neighborhood.name neighborhood.type building.name building.type adcode street
## 1 NULL NULL NULL NULL 350211 NULL
## number location level
## 1 NULL 118.074013,24.636101 兴趣点
高德地图返回的经纬度信息放在了 geocodes 下面的 location,其他的返回参数可以参考高德地图提供的开发文档[4]。
library(tidyr)
library(dplyr)
datafile <- data.frame( ## 提取经纬度
address = address,
city = temp_geo$geocodes$city,
geo = temp_geo$geocodes$location
) %>%
separate(col = geo, into = c('lng', 'lat'), sep = ',') ## 分割经度和纬度
datafile$lng <- as.numeric(datafile$lng)
datafile$lat <- as.numeric(datafile$lat)
head(datafile)
## address city lng lat
## 1 福建省厦门市厦门北站 厦门市 118.074 24.6361
用过 ArcGIS 朋友会比较清楚,常用的格式有 shp,Geojson 等,这些大家可以去 Github[5] 或者万能的淘宝找。如何处理和使用这些数据?我们会另作一期推文。
注意: 在收集的时候一定要注意主权完整,台湾省和南疆部分是中国领土,南海九段线是中国领海!此外,本教程不包括填色地图,所以不需要自定义地图数据。为了方便起见,本教程直接使用高德地图提供的底图。
3.2 路径地图绘制
受限于微信平台问题,所有的leaflet画的图都是以截图方式呈现,但是实际上leaflet生成的是交互式的地图,也就是你可以像导航软件里一样放大和缩小地图,不用受限于分辨率问题;上述代码中设置的label都是鼠标悬停显示。
另外,很多教程都没有提一件事:
根据《中华人民共和国测绘法》等有关法律、法规规定:在中华人民共和国境内公开出版地图、引进地图、展示、登载地图以及在生产加工的产品上附加的地图图形都需要经审核,审核通过之后编发审图号。
本教程使用的是高德的底图,所以可以直接使用高德提供的审图号。如果是来历不明的地图数据,无法提供审图号可能会引来一些不必要的麻烦。
[1]
leaflet: https://rstudio.github.io/leaflet
[2]
高德开放平台: https://lbs.amap.com/
[3]
jsonlite: https://cran.r-project.org/web/packages/jsonlite/index.html
[4]
开发文档: https://lbs.amap.com/api/webservice/guide/api/georegeo
[5]
Github: https://github.com/
[6]
官方说明文档: https://lbs.amap.com/api/webservice/guide/api/newroute
推荐: 可以保存以下照片,在 b 站扫该二维码,或者 b 站搜索【庄闪闪
】观看 Rmarkdown 系列的视频教程。Rmarkdown 视频新增两节视频(写轮眼幻灯片制作)需要视频内的文档,可在公众号回复【rmarkdown
】