这段时间我一直在研究如何用PIE创建带压缩的栅格数据集,由于我在比赛中使用的原始影像大小普遍都在300M以上,软件加载较慢,因此希望能对原始影像进行压缩,加快加载时间。

首先,该方法的关键是修改DataSource.DatasetFactory.CreateRasterDataset()方法中的一个参数。CreateRasterDataset()方法的参数说明请参考《PIESDK For Donet V5.0二次开发指南》。

由于《PIESDK For Donet V5.0二次开发指南》还没来得及更新,实际开发中CreateRasterDataset()方法最后还存在一个指南中未提及的参数mList,这个参数就是用来决定创建的栅格数据集是否是带压缩的。我们只需要将其设置为 "COMPRESS=PACKBITS"即可完成我们的需求。

经过对比,两幅影像不存在失真现象(左图为原始影像,右图为压缩后的影像)。

压缩后的大小仅为原影像的一半左右。

源代码如下:

 /// <summary>
/// 创建带压缩的栅格数据集事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton1_Click(object sender, EventArgs e)
{
string pathA = @"D:\ronghe.tif";
string[] options = new string[];
options[] = "COMPRESS=PACKBITS";
IRasterDataset rDataset = DatasetFactory.OpenRasterDataset(pathA, OpenMode.ReadOnly);
int xSize = rDataset.GetRasterXSize();
int ySize = rDataset.GetRasterYSize();
int bandCount = rDataset.GetBandCount();
IRasterBand rasterband = rDataset.GetRasterBand(bandCount - );
PixelDataType type = rasterband.GetRasterDataType(); int[] bandMap = new int[bandCount];
for (int i = ; i < bandCount; i++)
{
bandMap[i] = i + ;
} double[] geoTransA = rDataset.GetGeoTransform(); UInt16[] buf = new UInt16[xSize * ySize * bandCount]; bool ok = rDataset.Read(,, xSize, ySize, buf, xSize, ySize, type, bandCount, bandMap); ISpatialReference spGLL = rDataset.SpatialReference;
string stGLL = spGLL.ExportToWkt(); string rPathSaveGLL = @"D:\CompressedImage.tiff";
IRasterDataset rasterDatasetA = DatasetFactory.CreateRasterDataset(rPathSaveGLL, xSize, ySize, bandCount, type, "GTIFF", options); rasterDatasetA.Write(, , xSize, ySize, buf, xSize, ySize, type, bandCount, bandMap);
rasterDatasetA.SpatialReference = SpatialReferenceFactory.CreateSpatialReference(stGLL);
rasterDatasetA.SetGeoTransform(geoTransA);
(rasterDatasetA as IDisposable).Dispose(); mapControlMain.AddLayerFromFile(pathA, );
mapControlMain.AddLayerFromFile(rPathSaveGLL, );
mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
}

PIE创建带压缩的栅格数据集的更多相关文章

  1. PIE SDK栅格数据集的读写

    1. 功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍. 2. 功能实现说明 ...

  2. arcgis如何求两个栅格数据集的差集

    栅格数据集没有擦除功能,现在有栅格A和栅格B,怎么求两个栅格的差集C 具体步骤如下: 1.首先利用栅格计算器,把栅格B中的value全部赋值为0 输入语句:"栅格B" * 0 2  ...

  3. PIE-SDK For C++栅格数据集的读取

    1.功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取,目前PIE SDK支持多种数据格式的数据读取,下面对栅格数据格式的数据读取功能进行介绍. 2.功能实现说明 2.1 实现思路 ...

  4. PIE-SDK For C++栅格数据集的读写

    1.功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍. 2.功能实现说明 2. ...

  5. Tensorflow创建和读取17flowers数据集

    http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...

  6. ArcGIS 网络分析[8.4] 资料4 聚合——创建及打开网络数据集的类实现

    这篇是对前三篇的总结,因为网络数据集涉及的"点"太多了,我只能挑重点来设置,大家明白框架后可以自行寻求帮助文档添加功能. 我以C#类的形式给出,这个类包含很多种方法,因为本人的C# ...

  7. Caffe2 创建你的专属数据集(Create Your Own Dataset)[9]

    这一节尝试把你的数据转换成caffe2能够使用的形式.这个教程使用Iris的数据集.你可以点击这里查看Ipython Notebook教程. DB数据格式 Caffe2使用二进制的DB格式来保存数据. ...

  8. PIE SDK 文章目录索引

    1.PIE SDK介绍 1.1.  PIE软件介绍 1.2.  PIE SDK介绍 1.3.  PIE支持项目介绍 1.4.  PIE.NET-SDK插件式二次开发介绍 1.5.  PIE.NET-S ...

  9. PIE SDK打开自定义栅格数据

    1. 数据介绍 信息提取和解译的过程中,经常会生成一部分中间临时栅格数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存栅格数据集,来协助用户完成对自定义栅格数据的读取和 ...

随机推荐

  1. Linux 用epoll实现的简单http服务器

    Linux 用epoll实现的简单http服务器 main.c #include <stdio.h> #include <sys/types.h> #include <s ...

  2. qt需求

    1.登录框 账号密码 复杂度判断 2.监控  权限认证 (5分钟必须锁定,退回登录状态)--b/s 3.exe 嵌入exe (什么时间触发了什么消息,任何消息触发都可以,日志文件zlog,5分钟没有写 ...

  3. 201871010104-陈园园 《面向对象程序设计(java)》第十三周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  4. 微信小程序 - 视图层 | 基础语法

    视图层 WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件.事件系统,可以构建出页面的结构. 类似前端HTML 一.数据绑定 普通语法 test.wxml ...

  5. 使用表格 代替 txt文件(未完结)

    使用xlrd读取用户数据 首先创建一个xls文件 xlrd模块的简单使用 添加处理execl的接口: 使用excel生成测试报表

  6. e.preventDefault()

    定义和用法 取消事件的默认动作. 语法 event.preventDefault() 说明 该方法将通知 Web 浏览器不要执行与事件关联的默认动作(如果存在这样的动作).例如,如果 type 属性是 ...

  7. 知识点总结 VUE部分

    1.v-show和v-if的区别 v-show 操作的是元素的display属性 v-if 操作的是元素的创建和插入 v-if有更高的开销,而v-show有更高的初始渲染开销,如果需要非常频繁的切换, ...

  8. MACbook安装WIN7中文版后乱码的解决办法

    控制面板→时钟.语言和区域→区域和语言→管理→更改系统区域设置→选择为中国,简体中文→确定,按照要求你重启即可. 原来这个本子是香港买的,默认区域是英语,我说怎么乱码.

  9. 洛谷4965 薇尔莉特的打字机(Trie,DP)

    神仙题. 考虑在一棵 Trie 上进行染色,将可能出现的串的末尾染成黑色.答案就是黑点的个数.一开始只有 \(A\) 的末尾点是黑色. 当出现一个字符(不是退格)\(c\) 时,就要将每个黑点的 \( ...

  10. [LeetCode] 895. Maximum Frequency Stack 最大频率栈

    Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...