R语言在线地图神器:Leaflet for R包(六,完结篇)栅格、颜色和图例设置

来源:互联网 发布:2016手游大数据报告 编辑:程序博客网 时间:2024/04/20 05:52

八、栅格数据

 

栅格数据是当前GIS领域里面最庞大的一类数据(天上N颗卫星24小时无死角的对地球君进行直播……每天生成遥感数据都以PB为单位),leaflet作为地图可视化模块,自然也提供了加载栅格数据的方法。

 

方法如下:

addRasterImage(地图,参数)

 

要注意的一点是,栅格不像矢量数据,矢量本身就带有空间参考信息,而栅格有些是不带空间参考的,如果你不指定投影参数,那么leaflet会默认把加载的栅格投影成WGS84 Web Mercator (Auxiliary Sphere)(EPSG:3857),也就是谷歌地图用的那种空间参考。

 

下面通过两个示例来说明,首先是加载一个NC(netCDF)文件:

注意,需要安装raster包和ncdf4包

library(raster)

r <- raster("data/Leaflet/YSUZ98_KWBN_201312130055-var0-z0-rt0-t0.nc")

pal <- colorNumeric(c("transparent",topo.colors(100,alpha = NULL)), values(r),

                    na.color = "transparent")

leaflet() %>% addTiles() %>%

  addRasterImage(r, colors = pal, opacity = 0.8) %>%

  addLegend(pal = pal, values = values(r),

            title = "USA Snow 2013-12-13")

 

 

 

下面加载一个北京主干道的车流密度分析栅格:

r <- raster("E:/flow.tif")

pal <- colorNumeric(c("transparent",topo.colors(20,alpha = NULL)), values(r),

                    na.color = "transparent")

leaflet() %>% addTiles() %>%

  addRasterImage(r, colors = pal, opacity = 0.8) %>%

  addLegend(pal = pal, values = values(r),position="bottomleft",

            title = "北京交通主干道车流密度分析")

 

 

 

九、颜色设置

 

空间可视化的最重要部分,就是把空间要素上的附件属性映射到颜色上,通过颜色的对比,来反应变量之间的关系,这些变量可以是数值,也可以是类别。

 

R语言号称顶级的可视化语言,所以对于颜色设置的方法多到你眼花缭乱,有兴趣的同学可以去参考R语言的相关教程。

 

 

leaflet里面的颜色设置一共有个参数,分布是colorfillcolor,从名称就可以看出来,一个是主颜色,一个是填充色,那么对应各种对象来说,color一般就是所谓的边框的颜色了。

 

在配合leaflet进行数值渲染的R语言调色函数里面,最常用的有以下几个:

1、用于连续数值的:colorNumeric,colorBin和colorQuantile;

2、用于分类输入,colorFactor。

 

下面分别简单解释一下:

colorNumeric: 将连续数值线性映射为设定的颜色模式的过程,一般来说,会对设定的颜色模式根据数值的变化进行平滑插值

 

colorBin:也是将连续数值线性映射为设定的颜色模式的过程,也会对数据进行平滑内插生成颜色,但是与上一种方法不同的是,这个方法会对设定的颜色模式根据数值的变化进行分级设定

 

colorQuantile : 也是线性映射,但是设定的方式是通过百分位数进行分级

 

colorFactor: 把分类映射到颜色模式,如果颜色模式设定的数量和分类数量不一样,那么就对颜色模式进行平滑内插。

 

当然,你也可以使用R语言提供的那些调色板,比如heat.colors、cm.colors、rainbow等等,相关内容请查阅资料。

 

对于颜色设置的,实际上每一篇博客的demo的时候,都做了颜色渲染,大家有兴趣的时候回头去看,下面给出本章的一个实例:

 

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

pal <- colorNumeric(c("darkgreen", "yellow", "orangered"),poly@data$Pop_2009)

leaflet(poly) %>% addTiles() %>%

  addPolygons(color=~pal(poly@data$Pop_2009),fillOpacity  = 0.8,weight=1)%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="bottomright",

          title = "2009年人口数量(万人)")

 

pal <- colorNumeric("Greens",poly@data$Pop_2009)

leaflet(poly) %>% addTiles() %>%

  addPolygons(color=~pal(poly@data$Pop_2009),fillOpacity  = 0.8,weight=1)%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="bottomright",

            title = "2009年人口数量(万人)")

 

pal <- colorBin(c("darkgreen", "yellow", "orangered"),poly@data$Pop_2009,10)

leaflet(poly) %>% addTiles() %>%

  addPolygons(color=~pal(poly@data$Pop_2009),fillOpacity  = 0.8,weight=1)%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="bottomright",

            title = "2009年人口数量分级")

 

pal <- colorBin("Greens",poly@data$Pop_2009,10)

leaflet(poly) %>% addTiles() %>%

  addPolygons(color=~pal(poly@data$Pop_2009),fillOpacity  = 0.8,weight=1)%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="bottomright",

            title = "2009年人口数量分级")

 

 

十、图例:

 

图例是对地图可视化之后相关颜色或者符号的映射说明——当然,在leaflet里面,主要是针对颜色创建图例。

 

主要是方法如下:

 

addLegend(地图,属性,颜色列表,标记值……)

 

具体的属性方法,大家可以查阅帮助文档,下面给出一个示例:

 

pal <- colorNumeric("Greens",poly@data$Pop_2009)

leaflet(poly) %>% addTiles() %>%

  addPolygons(color=~pal(poly@data$Pop_2009),fillOpacity  = 0.8,weight=1)%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,

            title = "2009年人口数量(万人)</br>默认,右上角")%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,bins=5,position="bottomleft",

            title = "2009年人口数量(万人)</br>图例分级五级,左下角")%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="topleft",

          labFormat = labelFormat(suffix = " 万"),

          title = "2009年人口数量(万人)</br>加单位,左上角")%>%

  addLegend(pal = pal, values = poly@data$Pop_2009,position="bottomright",

          opacity = 1,

          title = "2009年人口数量(万人)</br>色带条不透明,右下角")

 

 

好了,到此为止,leafletfor R 的所有方法都介绍完了,正常进行地图可视化,那是绝对够用了……当然如果有哪位同学要在上面玩一些黑科技(想做出一些特别的效果来),也欢迎和我交流。

 

上面所有的脚本和数据,我将在整理完成之后,放出下载。

2 0