前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >geotrellis使用(十五)使用Bokeh进行栅格数据可视化统计

geotrellis使用(十五)使用Bokeh进行栅格数据可视化统计

作者头像
魏守峰
发布2018-04-28 16:44:39
1K0
发布2018-04-28 16:44:39
举报
文章被收录于专栏:点滴积累点滴积累

Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html

目录

  1. 前言
  2. 实现方案
  3. 总结

一、前言

       之前有篇文章介绍了使用Bokeh-scala进行数据可视化(见http://www.cnblogs.com/shoufengwei/p/5722360.html),其实当时选择Bokeh的部分原因就是Bokeh支持大数据量的可视化,有点“大数据”的意思,总之这刚好能与Geotrellis结合起来进行一些地理信息方面的大数据可视化统计工作。

       比如我们可以实现统计一大块区域内的DEM高程分布情况,将每个高程值出现多少次进行简单的可视化,最终效果如下图所示。下面为大家分析实现方法。

高程统计可视化效果图
高程统计可视化效果图

二、实现方案

       简单来说就是使用Geotrellis读取前端传入的区域内的数据,然后根据高程值进行分类,最后使用Bokeh进行可视化。下面逐一说明。

1.读取数据

       首先要将数据导入到Accumulo中,layoutScheme选择floating,这一块介绍过多次了,不再赘述。

       从Accumulo中读取数据在上一篇文章中也已经做了介绍,大同小异,在这里要简单一点,实现代码如下:

代码语言:javascript
复制
val layerId = LayerId(layerName, 0)
val raster = reader.read[SpatialKey, Tile, TileLayerMetadata[SpatialKey]](layerId)
    
val polygon = maskz.parseGeoJson[Polygon].reproject(LatLng, raster.metadata.crs)

val masked = raster.mask(polygon)
val tile = masked.stitch.tile

       通过以上语句就能将用户输入区域的数据拼接成一个大瓦片。

2.根据高程分类

       得到瓦片之后要进行高程分类,首先定义一个可变的map对象,然后从最小值到最大值都映射为0添加到map中,最后循环每一个瓦片值更新map对象,代码如下:

代码语言:javascript
复制
var map = scala.collection.mutable.Map[Double, Double]()
val (min, max) = tile.findMinMax
for (i <- min to max)
  if (!map.contains(i))
    map += i.toDouble -> 0.0
tile.histogram.foreach { (key, value) => {
    map(key.toDouble) = map(key.toDouble) + value
}
}

3.使用bokeh进行可视化

       之后要做的就是根据采样类型、投影方式以及数据类型将上述tile进行转换,代码如下:

代码语言:javascript
复制
object source extends ColumnDataSource {
    val x = column(map.keys.toIndexedSeq)
    val y = column(map.values.toIndexedSeq)
}

val xdr = new DataRange1d()
val ydr = new DataRange1d()

import source._

val plot = BokehHelper.getPlot(xdr, ydr, Pan | WheelZoom | Crosshair)
BokehHelper.plotBasic(plot)
BokehHelper.setCircleGlyph(plot, x, y, source)
plot.title("栅格数据分析")
BokehHelper.save2Document(plot)

       其中source类中map就是上述求出的高程值与出现次数对应的映射。BokehHelper类就是在使用Bokeh-scala进行数据可视化一文中我封装的帮助类,具体可以参考该文。这样就完成了对区域内高程进行分类、统计、可视化。

三、总结

       看似对高程进行统计分析、可视化没有太大的意义,这里介绍的其实只是一种思路、方法,我们可以对任意的栅格数据进行上述操作,如土壤、水域、资源环境等等,所以思想高于一切。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-08-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 一、前言
  • 二、实现方案
  • 三、总结
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档