PIE SDK创建金字塔算法

1.算法功能简介

  为栅格影像建立了金字塔,这些影像便能快速进行显示。除了在屏幕上显示外,金字塔还包含了很多其他信息。如果没有金字塔,那么在显示时就要访问整理栅格数据集,然后进行大量计算来选择哪些栅格像元被显示。金字塔是一种能对栅格影像按逐级降低分辨率的拷贝方式存储的方法。通过选择一个与显示区域相似的分辨率,只需进行少量的查询和少量的计算,从而减少显示时间。

  PIE支持金字塔创建算法功能的执行,下面对该算法功能进行介绍。

2.算法功能实现说明

2.1 实现步骤

第一步

算法参数设置

第二步

算法执行

第三步

结果显示

2.2 算法参数

算法名称

创建金字塔

C++算法DLL

ImagePyramidBuildAlgo.dll

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.ImagePyramidBuildAlgo

参数结构体

参数说明

IList<String>

输入创建金字塔的文件或文件夹路径集合

 

2.3 示例代码

数据路径

百度云盘地址下/ PIE示例数据/栅格数/04.World/World.tif

示例代码

 1 /// <summary>
 2 /// 金字塔创建
 3 /// </summary>
 4 public void BuildPyramic()
 5 {
 6     #region 参数设置
 7     string filePath = @"D:dataChina1worldWorld.tif";
 8     IList<string> listFile = new List<string>();
 9     listFile.Add(filePath);
10     #endregion
11 
12     #region 创建算法对象
13     PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImagePyramidBuildAlgo");
14     if (algo == null) return;           
15     algo.Name = "创建金字塔";
16     algo.Params = listFile;
17     #endregion
18 
19     #region 执行算法 并显示结果 
20     IRasterDataset dataset = DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IRasterDataset;
21     if (dataset == null) return;
22     int oldLevel = dataset.GetPyramidLevel();//获取金字塔级别
23     bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo);
24     if (result)
25     {
26         IRasterDataset dataset1 = DatasetFactory.OpenDataset(filePath, OpenMode.ReadOnly) as IRasterDataset;
27         if (dataset1 == null) return;
28         int newLevel = dataset.GetPyramidLevel();
29         string info = string.Format("金字塔算法执行成功,原来金字塔级别为:{0},转换后的为:{1}", oldLevel, newLevel);
30         MessageBox.Show(info);
31         IRasterLayer rLayer = LayerFactory.CreateDefaultRasterLayer(dataset1);
32         if (rLayer == null) return;
33         m_HookHelper.ActiveView.FocusMap.AddLayer(rLayer as ILayer);
34         m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
35         (dataset1 as IDisposable).Dispose();
36         dataset1 = null;
37     }
38     (dataset as IDisposable).Dispose();
39     dataset = null;
40     #endregion
41 }
View Code

2.4 示例截图

 

原文地址:https://www.cnblogs.com/PIESat/p/11248430.html