1、Beam简介
为了在Hadoop中可以序列化HDF文件,在各种搜索之后,无意中发现了一个强大的Java开源软件,它就是Beam。
对于从事遥感的研究者来说,可以通过安装Beam,将它当成一个强大开源的遥感处理软件使用。虽然没有envi那么好用,还马马虎虎过得去。至少安装Beam,不用授权文件去破解~
对于遥感软件开发人员来说,Beam的库简直一大利器!!!
用Java实现什么重投影、波段运算、主成分分析、图像裁剪、图像镶嵌,创建直方图,五花八门、各式各样、繁简不一的遥感操作,对它来说都是一碟开胃小菜。
不用担心它支持的遥感数据格式不够多,GeoTiff,HDF4,HDF5,这些常见的遥感格式,都不在话下。
附上他的官方地址:http://www.brockmann-consult.de/cms/web/beam/,Java API地址在这:http://www.brockmann-consult.de/beam/doc/apidocs/index.html,源代码在这儿:https://github.com/bcdev/beam
2、Beam中几个重要的类和概念
Product类
遥感图像在内存中的表示形式就是Product,Product只是存放着遥感影像的元数据信息,并不包含实际的遥感图像。一个Product可以包含多个Band,而ProductManager类用来管理多个Product。例如,一景tif数据或HDF数据在内存中的表示形式,就是一个Product啦。
Band类
Band包含了Product中的地理参数信息,Band中的图像信息存储在ProductData中,实际上Band只是存储着图像元数据信息的"容器";其包含的信息包括:
1、FlagCoding信息
2、其在所属Product中的位置(一个Product中可以包含多个Band)
3、该Band的中心波长
4、the solar spectral flux of the band(该Band的太阳光谱通量?)
5、Band的宽度和盖度
为什么Band中的影像数据要存放在ProductData中,而不是直接存放在该Band中呢?
原因:为了尽量减少内存的消耗,所以Band不会自动去读取ProductData,而是要通过执行Band的loadRasterData()方法显式的去获取到该Band对应的ProductData。(这么做也有道理,遥感图像动不动几十上百M的,如果都直接放内存,4G内存表示可能不够用啊)
3、Beam代码示例
将Product写入到本地硬盘,下面以GeoTiff格式的影像为例
Product testProduct = tifReader .readProductNodes("F:\\exp_data\\test5.tif" , null ); ProductWriterPlugIn tifWriterPlugin = new GeoTiffProductWriterPlugIn(); GeoTiffProductWriter tifProductWriter = new GeoTiffProductWriter( tifWriterPlugin ); File outFile = new File ("F:\\草原干旱指数实验数据\\test2.tif" );//写入绝对路径,即保存为本地文件;若只填入文件名,则该File保存为内存中 testProduct .setProductWriter(tifProductWriter ); tifProductWriter .writeProductNodes(testProduct , outFile );//writeProductNodes只将Product的头文件信息存放在outFile中,Product的Band并没有写入outFile productBand =testProduct.getBand("band_1"); productBand .writeRasterDataFully();//将Band的信息全部写入到outFile中,此时outFile就包含了Product的全部信息
从本地硬盘读取Product
Product grassProduct = grassCovertifReader.readProductNodes( "F:\\草原干旱指数实验数据\\设置了ProductReader后的map输出\\MCD12Q1", null);
原文地址:http://blog.csdn.net/until_v/article/details/42010861