PIE SDK存储格式转换
1.算法功能简介
影像存储格式转换可以实现栅格数据存储格式的自由转换,其中存储格式可以是 BSQ、 BIP、 BIL 三种格式。
遥感数字图像数据的存储与分发,通常采用以下三种数据格式:
BSQ( Band Sequential) ): 按照波段顺序依次记录图像数据,数据排列遵循以下规律:第一波段位居第一,第二波段位居第二…第 n 波段位居第 n 位;在第一波段中,数据依据行号顺序依次排列,每一行内,数据按像素号顺序排列。其余波段依次类推。(即按照波段顺序,当第一波段所有的数据存储记录结束后,才开始记录第二波段的数据。) BSQ 是最简单的存储格式,提供了最佳的空间处理能力。它先将图像同一波段的数据逐行存储下来,再以相同的方式存储下一波段数据。如果要获取图像单个波普波段的空间点( X, Y)的信息,那么采用 BSQ方式存储是最佳的选择。
BIP( Band Interleaved by Pixel): 按像元顺序记录图像数据,即在一行中,每个像元按波段次序交叉排列,属各波段数据间(按像元)交叉记录方式(即各波段数据间按列交叉排列方式)。数据排列遵循以下规律:在第一行中,第一波段的第一行第 1 个像素位居第一,第二波段的第一行第 1 个像素位居第二,第三波段的第一行第 1 个像素位居第三…第 n 波段的第一行第 1 个像素位居第 n 位,
然后为第一波段第一行第 2 个像素位居第 n+1 位,第二波段的第一行第 2 个像素位居第 n+2 位…其余各波段第一行数据排列位置以此类推,其余各行数据的记录排列顺序也遵照此规律。 BIP 格式提供了最佳的波谱处理能力。
BIL ( Band Interleaved by Pixel): 是逐行按波段次序排列的格式,即先记录第一波段第一行、第二波段第一行,第三波段第一行…第 n 波段第一行;再记录各波段第二行…其余数据记录排列顺序依次类推,属于各波段数据间(按行)交叉记录方式。 BIL 是介于空间处理和波谱处理之间的一种折中的存储格式。
PIE支持算法功能的执行,下面对存储格式转换算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
第一步 |
算法参数设置 |
第二步 |
算法执行 |
第三步 |
结果显示 |
2.2. 算法参数
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名称 |
PIE.CommonAlgo.FormatTranAlgo |
|
参数结构体 |
FormatTran_Exchange_Info |
|
参数说明 |
||
strInFile |
String |
输入栅格影像的路径 必须输入波段数大于1的影像 |
strOutFile |
String |
输出影像的路径 |
m_strFileType |
String |
根据输出类型获得文件编码类型 .tif/.tiff——GTiff .img—————HFA 其他—————ENVI |
lOutDataType |
Int |
输出文件存储格式的类型 0代表BIP,1代表BSQ,2代表BIL; 注意: 输出存储格式不能和输入文件的存储格式相同; 输出GeoTIFF数据不支持BIL存储方式; 输出ERDAS数据不支持BIL和BIP存储方式; |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/ FundamentalToolDemo.FormatTranDemo |
数据路径 |
百度云盘地址下/ PIE示例数据/栅格数据/04.World/World.tif |
视频路径 |
百度云盘地址下/PIE视频教程/10.算法调用/多功能工具/存储格式转换算法.avi |
示例代码 |
|
1 /// <summary> 2 ///存储格式转换算法测试,本算法实现了将World.tif的存储格式转换为BSQ存储方式生成World1.img文件 3 /// </summary> 4 private void Test_KrigingInterpolationAlgo() 5 { 6 #region 1、参数设置 7 PIE.CommonAlgo.FormatTran_Exchange_Info info = new PIE.CommonAlgo.FormatTran_Exchange_Info(); 8 info.strInFile = @"D:\Data\World.tif"; 9 info.strOutFile = @"D:\Data\World1.img"; 10 info.m_strFileType = "HFA"; 11 info.lOutDataType = 1; 12 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.FormatTranAlgo"); 13 if (algo == null) return; 14 #endregion 15 //2、算法执行 16 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 17 algo.Name = "存储格式转换"; 18 algo.Params = info; 19 PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 20 //3、结果显示 21 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\World1.img"); 22 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 23 } |
2.4. 示例截图