Geotrellis系列文章鏈接地址http://www.cnblogs.com/shoufengwei/p/5619419.html
目錄
一、前言
之前我們處理的都是單波段的Tiff數據,可以實現瓦片的讀取、處理等操作,如果Tiff為多波段Tiff,並且我們不希望在導入的時候將多波段合並成單波段,這時候就需要進行多波段數據處理。多波段數據處理方式基本與單波段處理方式相同,稍有差別,我在這里簡單介紹之。
二、多波段數據導入
首先准備一個多波段的Tiff文件,將其導入Accumulo中。單波段數據導入代碼如下:
implicit val sc = SparkUtils.createSparkContext("ETL SinglebandIngest", new SparkConf(true))
Etl.ingest[ProjectedExtent, SpatialKey, Tile](args, ZCurveKeyIndexMethod)
sc.stop()
多波段基本相同,代碼如下:
implicit val sc = SparkUtils.createSparkContext("ETL MultibandIngest", new SparkConf(true))
Etl.ingest[ProjectedExtent, SpatialKey, MultibandTile](args, ZCurveKeyIndexMethod)
sc.stop()
運行方式為將代碼達成jar包,然后提交到spark集群,這在之前文章中已經介紹過,不同的是format參數要設置為multiband-geotiff。
三、讀取多波段瓦片
多波段數據存入Accumulo中之后,讀取單個瓦片的代碼如下:
val multiTile = tileReader.reader[SpatialKey, MultibandTile](LayerId(name, zoom)).read(key)
其中name表示多波段瓦片存儲的layer,zoom為讀取瓦片的層級,key為瓦片的x、y坐標,tileReader為AccumuloValueReader實例。這樣得到的結果就是一個MultibandTile對象。
四、提取單波段
讀取出多波段瓦片之后可以進行各種各樣的操作,比如將多波段取出三個波段進行RGB渲染之后在前台顯示,或者通過前台控制顯示任意單一波段的瓦片數據。在這里我簡單介紹一些顯示單一波段瓦片。
理論上很簡單,因為MultibandTile對象,簡單來說就是一個Tile的數組,這時候只需要獲取到用戶想要瀏覽的波段值,從數組中提取出相應的Tile即可。代碼如下:
multiTile.bands(bandNum)
其中bandNum為想要提取的波段號。
五、總結
本文簡單介紹了多波段數據導入、處理的一些細節,真的是很簡單,因為目前關於多波段只進行了這些工作,遂將其簡單總結之,還未深入涉及,研究的寬度和深度都不夠,下一步會根據工作情況深入研究之后進行進一步總結。