R语言在线地图神器:Leaflet for R包(四) 弹出窗口和几何要素

来源:互联网 发布:ubuntu etcd集群搭建 编辑:程序博客网 时间:2024/05/21 06:16

五、弹出窗

弹出窗口可能是地图上除了缩放平移以外最常用的交互模式,鼠标点击一个要素,就能弹出一个提示窗,提示窗中能够对点击的要素进行详细的描述。

因为leaflet用的html5技术来实现的,所以弹出窗完美支持HTML语法,这样就可以设置各种超文本信息了,包括但是不限于文字、图片、视频等等。

下面来看一个例子:

  tiananm <- paste("<p>","天安门,坐落在中华人民共和国首都北京市的中心、

                 故宫的南端,与天安门广场以及人民英雄纪念碑、毛主席纪念堂、

                 人民大会堂、中国国家博物馆隔长安街相望,占地面积4800平方米,

                 以杰出的建筑艺术和特殊的政治地位为世人所瞩目。","</p>",

                 "<a href='http://www.tiananmen.org.cn/index.htm'>点击查看更多</a>",

                 "<p><img src='http://img.blog.csdn.net/20161016004301807' width='50%'></p>",

                 "<p><img src='http://img.blog.csdn.net/20161016005048911' width='50%'></p>"

                 )

  leaflet()%>%addTiles()%>%addMarkers(lng=116.391, lat=39.906, popup=tiananm)

 

 

如果所有的信息都在数据框里面了,那么就更容易了,直接设置显示就行,如下:

  pop <- paste("名称:",bj3H$mc,"<br/>",

             "等级:",bj3H$dj,"<br/>",

             "分类:",bj3H$fl,"<br/>",

             "科室数目:",bj3H$fl,"<br/>",

             "地址:",bj3H$dizhi1,"<br/>",

             "简介:",bj3H$jj,"<br/>",

             "标记<img src='",bj3H$hb,"' width='100%'/><br/>"

             )

  leaflet(bj3H)%>%addTiles()%>%addMarkers(popup=pop)

 

 

 

六:几何图形和线状要素

leaflet除了画点以外,还可以绘制各种几何图层,包括线、圆形(上一节讲了)、方形和复杂多边形等,这一节我们来看看如何绘制这些图形。

首先,还是完成最开始我绘制的马里奥大叔,上一次用坐标够了一个简单的轮廓,现在用完整的矢量化方式,绘制到地图上。步骤如下:

1、矢量化一张马里奥大叔的图片,我一般用ArcGIS,如下:

 

生成shape file之后,用leaflet绘制出来:

  library(maptools)

  path <- "E:/workspace/GIS_data/data/other/Mario/"

  ma <- readShapePoly(paste(path,"ma.shp",sep =""))

  pal <- colorFactor(c("#DB231F", "#91462E","#0F0217","#F6C597","#5454D7"), domain = c("A", "B","C","D","E"))

  leaflet(ma) %>% addProviderTiles("Esri.WorldTopoMap") %>%

    addPolygons(color = ~pal(Co),stroke = FALSE,fillOpacity = 0.9)

 


总共也就使用了5种颜色,绘制结果如下:可以看见,因为投影的问题,加载到地图上,稍微有些变形。

leaflet可以直接读取空间数据来进行绘制,根据官方文档,直接支持的对象如下:

1sp包中的SpatialPolygons, SpatialPolygonsDataFrame, Polygon, 和Polygons类所派生的对象。

2sp包中的SpatialLines, SpatialLinesDataFrame, Lines,和 Line 类所派生的对象。

3maps包里面的map对象。

 

上面我绘制马里奥大叔,用的就是SpatialPolygonsDataFrame对象进行绘制的。

而要读取这些空间对象,通过maptools包,或者rgdal包都可以实现。

下面我们来看一个绘制线的方法,首先还是通过shapefile来绘制:一共两类数据,第一类道路用绿色,第二类道路用红色。

  path <- "E:/workspace/GIS_data/data/other/bjline/"

  bmr <- readShapeLines(paste(path,"bjMainRoad.shp",sep =""))

  pal <- colorFactor(c("green", "red"), domain = c("0x01", "0x02"))

  leaflet(bmr) %>% addProviderTiles("Esri.WorldTopoMap") %>%

    addPolylines(color=~pal(bmr$MP_TYPE))

 

 

关于画圆的例子,我这里就不详细说了,大家可以回去看上一节。

下面来看看画矩形的例子。矩形在地图的绘制的过程中非常常见,比如在军事地图上,一般都是用矩形来进行焦点标识的,如下:(游戏《皇牌空战》……虾神灰常喜欢的一个PSP游戏)

 

下面来看看一个绘制矩形的例子

  leaflet() %>%addProviderTiles("Esri.WorldImagery") %>%

  addRectangles(

    lng1=116.1, lat1=39.7,

    lng2=116.63, lat2=40.1,

    weight = 3,color = "red",fillColor = "transparent",

    opacity = 1,popup="这里是北京"

  )

 

 

 

 

 

0 0
原创粉丝点击