您的位置:首页 > 其它

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

2018-03-03 16:54 281 查看
五、弹出窗 
弹出窗口可能是地图上除了缩放平移以外最常用的交互模式,鼠标点击一个要素,就能弹出一个提示窗,提示窗中能够对点击的要素进行详细的描述。 
因为leaflet用的html5技术来实现的,所以弹出窗完美支持HTML语法,这样就可以设置各种超文本信息了,包括但是不限于文字、图片、视频等等。 
下面来看一个例子:
  tiananm <- paste("<p>","天安门,坐落在中华人民共和国首都北京市的中心、                 故宫的南端,与天安门广场以及人民英雄纪念碑、毛主席纪念堂、                 人民大会堂、中国国家博物馆隔长安街相望,占地面积4800平方米,                 以杰出的建筑艺术和特殊的政治地位为世人所瞩目。","</p>",                 "<a href='http://www.tiananmen.org.cn/index.htm'>点击查看更多</a>",                 "<p><img src='https://img-blog.csdn.net/20161016004301807' width='50%'></p>",                 "<p><img src='https://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可以直接读取空间数据来进行绘制,根据官方文档,直接支持的对象如下: 
1、sp包中的SpatialPolygons, SpatialPolygonsDataFrame, Polygon, 和Polygons 类所派生的对象。2、sp包中的SpatialLines, SpatialLinesDataFrame, Lines, 和 Line 类所派生的对象。3、maps包里面的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="这里是北京"  )
  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐