PIE创建带压缩的栅格数据集
这段时间我一直在研究如何用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创建带压缩的栅格数据集的更多相关文章
- PIE SDK栅格数据集的读写
1. 功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍. 2. 功能实现说明 ...
- arcgis如何求两个栅格数据集的差集
栅格数据集没有擦除功能,现在有栅格A和栅格B,怎么求两个栅格的差集C 具体步骤如下: 1.首先利用栅格计算器,把栅格B中的value全部赋值为0 输入语句:"栅格B" * 0 2 ...
- PIE-SDK For C++栅格数据集的读取
1.功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取,目前PIE SDK支持多种数据格式的数据读取,下面对栅格数据格式的数据读取功能进行介绍. 2.功能实现说明 2.1 实现思路 ...
- PIE-SDK For C++栅格数据集的读写
1.功能简介 栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍. 2.功能实现说明 2. ...
- Tensorflow创建和读取17flowers数据集
http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...
- ArcGIS 网络分析[8.4] 资料4 聚合——创建及打开网络数据集的类实现
这篇是对前三篇的总结,因为网络数据集涉及的"点"太多了,我只能挑重点来设置,大家明白框架后可以自行寻求帮助文档添加功能. 我以C#类的形式给出,这个类包含很多种方法,因为本人的C# ...
- Caffe2 创建你的专属数据集(Create Your Own Dataset)[9]
这一节尝试把你的数据转换成caffe2能够使用的形式.这个教程使用Iris的数据集.你可以点击这里查看Ipython Notebook教程. DB数据格式 Caffe2使用二进制的DB格式来保存数据. ...
- 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 ...
- PIE SDK打开自定义栅格数据
1. 数据介绍 信息提取和解译的过程中,经常会生成一部分中间临时栅格数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存栅格数据集,来协助用户完成对自定义栅格数据的读取和 ...
随机推荐
- Python环境安装与基础语法(2)——数据类型、标识符、语言分类
高级语言发展 结构化语言:以顺序(步骤化),分支,循环描述问题 面向对象语言:接近人类的认知,万物抽象成对象,对象间的关系抽象成类和继承 程序=数据结果+算法 Python解释器 CPython:由C ...
- 组件注册-自定义TypeFilter指定过滤规则
组件注册-自定义TypeFilter指定过滤规则 4.1 FilterType.ANNOTATION 按照注解方式 4.2 FilterType.ASSIGNABLE_TYPE 按照给定的类型 @Co ...
- arduino雨滴传感器
https://blog.csdn.net/yichu5074/article/details/81074055 功能介绍:接上5V电源,电源指示灯亮,感应板上没有水滴时,DO输出为高电平,开关指示灯 ...
- git clean (11)
#delete untracked files git clean -f # delete untracked files and directories git clean -fd # -n opt ...
- 洛谷1439:最长公共子序列(nlogn做法)
洛谷1439:最长公共子序列(nlogn做法) 题目描述: 给定两个序列求最长公共子序列. 这两个序列一定是\(1\)~\(n\)的全排列. 数据范围: \(1\leq n\leq 10^5\) 思路 ...
- 第02组 Beta冲刺(2/4)
队名:十一个憨批 组长博客 作业博客 组长黄智 过去两天完成的任务:了解整个游戏的流程 GitHub签入记录 接下来的计划:继续完成游戏 还剩下哪些任务:完成游戏 燃尽图 遇到的困难:没有美术比较好的 ...
- K8s 集群安装(一)
01,集群环境 三个节点 master node1 node2 IP 192.168.0.81 192.168.0.82 192.168.0.83 环境 centos 7 centos 7 cen ...
- Collection和Collections有什么区别?
本文链接:https://blog.csdn.net/xiangyuenacha/article/details/84237663 1.java.util.Collection 是一个集合接口 ...
- SpringCloud项目中使用Nacos作为注册中心
SpringCloud和Nacos的介绍原理在这里就不多说了,百度一大堆,这里就只是记录一下刚开始学习时候项目的使用过程 Nacos-server 我这里是从官网下载的Nacos-server 下载地 ...
- spring boot开启gzip
Web服务使用Spring Boot2X且运行在Tomcat或者Jetty中,支持gzip压缩可以 修改配置文件 application.properties server.compression.e ...