想画出你家乡地图吗,来来来!

news/2024/11/17 4:45:48/

看到各种各样漂亮的地图有没有很羡慕,那么这些地图究竟是怎么画出来的呢,这里主要介绍两个画地图的R包。

一、leafletCN

1、包的下载与安装

    下载:

        install.packages('leafletCn')

    安装:

        library(leafletCN)

2、主函数介绍

(1)、regionNames函数

该函数为找地名函数,比如:

> regionNames('十堰市')

[1] "丹江口市" "房县"    

[3] "茅箭区"   "郧西县"  

[5] "郧县"     "张湾区"  

[7] "竹山县"   "竹溪县"  

#可以查看到我们十堰市的所有县

>regionNames('湖北')

#会列出湖北所有市

regionNames的粒度是省级、县级,在细分就没有了。执行regionNames()之后,可以知道包里面存着哪些地方,是否有你要的内容。

(2)、主函数——demomap:区域式地图

install.packages("rgeos")

demomap("杭州")

就会画出杭州的交互式地图,可以拖拽,实在闲的蛋疼的话,你可以把整个世界地图拖完,相信自己。

640?wx_fmt=png

(3)、主函数一一geojsonmap:地图标色函数

#主函数--geojsonmap:地图标色函数

下面画出中国地图

>dat<-data.frame(name = regionNames("china"),value = runif(34))

geojsonMap(dat,"china")

640?wx_fmt=png

可以看出用了蓝色的渐变色交错表示出了全国的34个省市自治区,当然根据“四色定理”只需要4种颜色即可标记一张地图。

输入的数据长这样(查看前几行)

> head(dat)

              name     value

1 新疆维吾尔自治区 0.9109566

2       西藏自治区 0.9469343

3     内蒙古自治区 0.3989314

4           青海省 0.3264521

5           四川省 0.3350581

6         黑龙江省 0.5405709

3、辅助函数

(1)、辅助函数一一amap:高德地图底图

1leaflet() %>%   amap()

当然了,这么执行只有一个白板地图,并不是实体的。

(2)、辅助函数——read.geoShape:genjson格式转化

1if(require(sp)){
2
3 filePath = system.file("geojson/china.json",package = "leafletCN")
4
5 map = read.geoShape(filePath)
6
7 plot(map)
8
9}#如图

640?wx_fmt=png

读入了china.json格式的内容。

(3)、辅助函数一一leafletGeo:地图+小显示框

把一个数据框和一个地图组合在一起, 方便用leaflet调用, 其中名字的 变量为name, 数值的变量为value

4、leafletCN案例

(1)、多点标注:地图+标点+带icoon

 1#iconList 生成小框框2iconList = awesomeIconList(3  "home" = makeAwesomeIcon(icon = "home",markerColor = "skyblue"),4  "weixin" = makeAwesomeIcon(icon = "cutlery",markerColor = "red"),5  "bank" = makeAwesomeIcon(icon = "plus-sign",markerColor = "orange"),6  "automobile" = makeAwesomeIcon(icon = "trash",markerColor = "purple"),7  "coffee" = makeAwesomeIcon(icon = "book")8)9
10#每个小框框的坐标,经纬度
11geo = data.frame(lon = rep(121.44, 5),
12                 lat = rep(31.22, 5),
13                 city = rep("Shanghai", 5))
14
15#坐标进行微调,使得有差异
16geo$lon = geo$lon+rnorm(5,0,0.003)
17geo$lat = geo$lat+rnorm(5,0,0.003)
18
19#小框框的属性
20geo$type = c("home",
21             "weixin",
22             "bank" ,
23             "automobile", 
24             "coffee" )
25
26#在高德地图上进行绘制
27
28leaflet(geo) %>% amap() %>%
29  addMiniMap() %>% 
30  addAwesomeMarkers(icon = ~iconList[type])

这里awesomeIconList是小框框定义的一个函数;

geo 是坐标点的经纬度,geo$type是坐标点的属性;

leaflet(geo) ,放入数据; amap(),调出高德地图;  addMiniMap() ,看到右下角的小显示框了没?;  addAwesomeMarkers(icon = ~iconList[type])加入坐标点+坐标的icon

640?wx_fmt=png

(2)、地图+分区域显示+色彩

我把它做成了一个函数,只需要输入你所在的市名就可以画出市县情况图了

 1print_map<-function(s){23  if(require(leaflet)){45    region=regionNames(s)67    dat = data.frame(region,runif(length(region)))89    map = leafletGeo(s, dat)
10
11    #涂色环节
12
13    pal <- colorNumeric(
14
15    palette = "Blues",
16
17    domain = map$value)
18
19    #载入高德地图amap
20
21    leaflet(map) %>% amap() %>%
22
23    #加入框边界及颜色
24
25      addPolygons(stroke = TRUE,
26
27                smoothFactor = 1,
28
29                fillOpacity = 0.7,
30
31                weight = 1,
32
33                color = ~pal(value),
34
35                popup = ~htmltools::htmlEscape(popup)
36
37    ) %>%
38
39    #加入右下角边框
40
41    addLegend("bottomright", pal = pal, values = ~value,
42
43              title = "legendTitle",
44
45              labFormat = leaflet::labelFormat(prefix = ""),
46
47              opacity = 1)
48
49  }
50
51}

首先把这个函数运行一下,告诉计算机这个函数的存在,然后只需输入两行代码:

>s<-'十堰'    #家乡所在市

>print_map(s)

640?wx_fmt=png

二、leaflet

1、说说底图

leaflet 的底图太多了,不过大多以全世界、美国的视角,简单列举几个:

 1leaflet() %>% addTiles() #openStreetMap 正常的世界地图23leaflet() %>% amap()  # 高德(leafletCN)45leaflet() %>% addProviderTiles("Thunderforest.SpinalMap")# 暗黑火焰风格67leaflet() %>% addProviderTiles("Esri.WorldImagery")# 卫星地图89leaflet() %>% addProviderTiles("OpenTopoMap")  #带海拔的地图
10
11leaflet() %>% addProviderTiles("NASAGIBS.ViirsEarthAtNight2012")  #NASA夜景
12
13leaflet() %>% addProviderTiles("Stamen.Toner")   #黑白底图

2、世界地图+多标记+标记显示数字

1data(quakes)
2
3# Show first 20 rows from the `quakes` dataset
4
5leaflet(data = quakes[1:20,]) %>% addTiles() %>%
6
7  addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag))

quakes是packages自带的数据,数据长这样:

        lat   long depth mag stations

1    -20.42 181.62   562 4.8       41

2    -20.62 181.03   650 4.2       15

3    -26.00 184.10    42 5.4       43

4    -17.97 181.66   626 4.1       19

leaflet(data = quakes[1:20,]) ,显示quakes数据集的前20个;

addTiles() ,世界地图底纹;

addMarkers(~long, ~lat, popup = ~as.character(mag), label = ~as.character(mag))中,

~long, ~lat分别代表经度、维度;popup、label 从图中可以看到,那个数字6.1有两种显示方式,一个是标签式、一个是弹窗。

640?wx_fmt=png

3、地图+点集区域+复选框+NASA星空图

 1geo = data.frame(long = rep(121.44, 1000),23                 lat = rep(31.22, 1000),45                 mag=rep(5,1000))67#mag函数是用来衡量后面,点集范围大小89geo$long = geo$long+rnorm(1000,0,1)
10
11geo$lat = geo$lat+rnorm(1000,0,1)
12
13geo$mag = geo$mag+rnorm(1000,0,1)
14
15outline <- geo[chull(geo$long, geo$lat),]
16
17map <- leaflet(geo) %>%
18
19  # 底层阶段
20
21  # 第一层底图,高德
22
23  amap(group = "高德") %>%                        
24
25  # 第二层底图,黑底图NASA
26
27  addProviderTiles(providers$NASAGIBS.ViirsEarthAtNight2012, group = "黑底") %>%   
28
29  # 第三层底图,白底层
30
31  addProviderTiles(providers$Stamen.TonerLite, group = "白底") %>% 
32
33  # 点集+区域轮廓阶段
34
35  addCircles(~long, ~lat, ~7^mag/50, stroke = F, group = "圈点",color="#97FFFF") %>%          
36
37  # 描点画圈,stroke=T的话,边界包边,丑
38
39  # 绘制轮廓,利用前面的凸集点
40
41  addPolygons(data = outline, lng = ~long, lat = ~lat,
42
43              fill = F, weight = 2, color = "#FFFFCC", group = "轮廓") %>% 
44
45  # 复选框       
46
47  addLayersControl( 
48
49    baseGroups = c("高德", "黑底", "白底"),                     
50
51    #显示层
52
53    overlayGroups = c("圈点", "轮廓"),
54
55    options = layersControlOptions(collapsed = FALSE)
56
57  )
58
59map

640?wx_fmt=png

(1)、底层阶段

amap和addProviderTiles的两个,都是底图样式(其他底图可见:leaflet-extras网站),其中的group是自定义的名称,可以自己命名;

(2)、点集+区域轮廓阶段

addCircles是描绘点的,long,lat是经度、维度,stroke是点是否包边,为true很丑;group是自定义的名称,color是圈圈的颜色,颜色RGB列表;addPolygons是描绘外围的轮廓的,数据outline是通过求凸集函数chunk求得,lng和lat分别是经度维度;

(3)、复选框阶段

addLayersControl加入控件组,baseGroups 是右上角的一个框,overlayGroups 是下面的数字框。

猜你可能喜欢

640?wx_fmt=jpeg


http://www.ppmy.cn/news/508513.html

相关文章

【AI视野·今日CV 计算机视觉论文速览 第246期】Thu, 21 Apr 2022

AI视野今日CS.CV 计算机视觉论文速览 Thu, 21 Apr 2022 Totally 71 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: *****&#x1f4da;户外单图重光照方法, 基于单图深度估计结果作为几何引导&#xff0c;并利用图像空间的光线对齐层将深度图转换为3D表示来…

2066 一个人的旅行

#问题 Problem Description 虽然草儿是个路痴&#xff08;就是在杭电待了一年多&#xff0c;居然还会在校园里迷路的人&#xff0c;汗~),但是草儿仍然很喜欢旅行&#xff0c;因为在旅途中 会遇见很多人&#xff08;白马王子&#xff0c;^0^&#xff09;&#xff0c;很多事&…

Python文本分析(NLTK,jieba,snownlp)

自然语言处理(NLP)是研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法&#xff0c;也是人工智能领域中一个最重要、最艰难的方向。说其重要&#xff0c;因为它的理论与实践与探索人类自身的思维、认知、意识等精神机制密切相关:说其艰难&#xff0c;因为每一项…

android9的手机,手机 篇九:一加9R之光藏于机身内外 新品深度体验

手机 篇九&#xff1a;一加9R之光藏于机身内外 新品深度体验 2021-05-21 21:49:50 2点赞 1收藏 0评论 游戏手机大家都不陌生&#xff0c;拥有高端的散热系统和极高的刷新率&#xff0c;当然还不止这些。那么一直不将就的一加手机也开始不淡定&#xff0c;刚刚发布不久的一加9R要…

『UE4数字孪生』开发流程浅析(持续更新)

数字孪生 是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。 先不废话&#xff0c;直接上作品&#xff1a; 石几衣束的B站…

统计词频-生成词云-数据分析报告(python R语言)

数据分析 统计洛杉矶旅游地区的词频&#xff1a;景点词和酒店词 数据源&#xff1a;携程 网站的文本 数据分析&#xff1a; 统计词频&#xff08;python语言&#xff09; 用词云展示结果&#xff08;R语言&#xff09; 先看结果&#xff1a; 旅游景点的词频 旅游酒店的词频…

『UE4数字孪生』开发流程浅析2022版(持续更新)

数字孪生 是充分利用物理模型、传感器更新、运行历史等数据&#xff0c;集成多学科、多物理量、多尺度、多概率的仿真过程&#xff0c;在虚拟空间中完成映射&#xff0c;从而反映相对应的实体装备的全生命周期过程。并利用大数据计算&#xff0c;深度学习&#xff0c;人工智能等…

kotlin版 高德地图集成 实现夜景切换,卫星图,英文切换,当前天气,地图位置标记等基础实现.

上图为实现后效果 默认地图标点> 英文>夜景地图>卫星地图>获取当前天气 接下来我们集成地图 1.我们去高德地图开放平台注册&#xff08;高德开放平台 | 高德地图API&#xff09;申请key(可以用QQ &#xff0c;邮箱等注册登录) 在这里创建应用会让你输入名字和应用…