1. 数据介绍

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

下面以一副影像数据的抠图算法来演示自定义栅格数据的应用。

2. 实现思路及原理说明

第一步

打开原始栅格数据;

第二步

读取部分数据至内存中,设置读取的起始点、读取范围等参数;

第三步

建立栅格内存数据集;

第四步

将内存中的数据写入内存数据集;

第五步

通过内存数据集创建栅格图层;

第六步

添加栅格图层到地图并刷新;

3. 核心接口与方法

接口/类

方法

说明

IRasterDataset

GetBandCount()

获取波段个数

GetRasterBand()

获取指定索引的波段

Read()

将数据读取至内存中

Write()

将内存数据写入栅格数据集中

SetGeoTransform

设置六参数

SpatialReference

空间参考

DatasetFactory

CreateRasterDataset()

创建栅格数据集

4. 示例代码

项目名称

百度云盘地址下/PIE示例程序/03.数据加载/11.打开自定义栅格数据

数据位置

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

视频位置

百度云盘地址下/PIE视频教程/03.数据加载/11.打开自定义栅格数据.avi

示例代码

 方法(一)打开自定义栅格数据
if (mapControlMain.FocusMap.LayerCount == )return;
IRasterLayer pRasterLayer = mapControlMain.ActiveView.CurrentLayer as IRasterLayer;
if (pRasterLayer == null)return;
IRasterLayer memLayer = OpenMemRasterLayer(pRasterLayer, , );
if(memLayer!=null)
{
mapControlMain.FocusMap.AddLayer(memLayer as ILayer);
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
} /// <summary>
/// 自定义栅格数据读取(通过内存RasterData构建RasterLayer)
/// </summary>
/// <param name="rasterLayer">栅格数据路径</param>
/// <param name="startX">读取起始位置X</param>
/// <param name="startY">读取起始位置Y</param>
/// <param name="?"></param>
/// <returns></returns>
private IRasterLayer OpenMemRasterLayer(IRasterLayer rasterLayer, int startX, int startY)
{
IRasterLayer memRasterLayer = null;
object array = null;//存储读取出的数据
//栅格图层参数读取
IRasterDataset rasterDataset = rasterLayer.Dataset;
int bandCount = rasterDataset.GetBandCount();
PixelDataType rasterDataType = rasterDataset.GetRasterBand().GetRasterDataType(); //读取栅格数据块大小
int width = ;
int height = ;
switch (rasterDataType)
{
case PixelDataType.UInt16:
array = new UInt16[width * height * bandCount];
break;
case PixelDataType.Byte:
array = new Byte[width * height * bandCount];
break;
default:
break;
}
int[] bandMap = new int[bandCount];
for (int i = ; i < bandCount; i++)
{
bandMap[i] = i + ;
}
//将pRasterLayer中的数据读取至数组中
bool oK = rasterDataset.Read(startX, startY, width, height, array, width, height, rasterDataType, bandCount, bandMap); //栅格读取
double[] geoTrans = rasterDataset.GetGeoTransform(); //创建内存数据集
IRasterDataset newRDataset = DatasetFactory.CreateRasterDataset("", width, height, bandCount, rasterDataType, "MEM", null);
//数组中的数据写入内存数据集中
oK = newRDataset.Write(, , width, height, array, width, height, rasterDataType, bandCount, bandMap); //栅格写入
//设置参数
newRDataset.SetGeoTransform(geoTrans);//设置仿射变换参数
newRDataset.SpatialReference = rasterDataset.SpatialReference;//设置空间参考 //创建RasterLayer
memRasterLayer = PIE.Carto.LayerFactory.CreateDefaultRasterLayer(newRDataset);
return memRasterLayer;
}

5. 示例截图

PIE SDK打开自定义栅格数据的更多相关文章

  1. PIE SDK打开自定义矢量数据

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

  2. PIE SDK打开栅格数据

    1. 功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联. ...

  3. PIE SDK打开网络地图数据

    1. 数据介绍 网络地图数据是在线地图服务发布出来的数据,其支持数据的网络查看和传输,极大的促进了GIS的发展. 目前PIE SDK支持百度地图.谷歌地图.高德地图.天地图.Bing地图.ArcGIS ...

  4. PIE SDK打开矢量数据

    1. 功能简介 GIS将地理空间数据表示为矢量数据和栅格数据.矢量数据模型使用点.线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点.河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联. ...

  5. PIE SDK矢量自定义渲染

    1. 功能简介 PIE SDK中关于矢量渲染提供了多种方案,包括简单渲染.分级渲染.唯一值渲染,这几种渲染方式具有一定的通用性,可以满足用户绝大多数的需求. 当面对复杂的业务,当前渲染方案无法满足用户 ...

  6. PIE SDK打开HDF、NC数据

    1. 功能简介 HDF 是美国国家高级计算应用中心(National Center for Supercomputing Application)为了满足各种领域研究需求而研制的一种能高效存储和分发科 ...

  7. PIE SDK打开静止卫星数据

    1. 功能简介 静止卫星是位于地球赤道上空约3.58万km处,与地面始终保持相对静止的卫星,静止卫星的特点是覆盖区域广,具有很强的机动灵活性,能够对特定区域进行分钟级高重复观测,可快速监测灾害目标的动 ...

  8. PIE SDK打开长时间序列数据

    1. 功能简介 时间序列数据(time series data)是在不同时间上收集到的数据,这类数据是按时间顺序收集到的,用于所描述现象随时间变化的情况.当前随着遥感卫星技术日新月异的发展,遥感卫星的 ...

  9. PIE SDK打开GDB、Dwg数据

    1. 功能简介 目前不同的GIS软件平台具有自己独特支持的数据格式,如ESRI的File GeoDataBase和Personal GeoDataBase.MapInfo的mif数据.AutoCAD的 ...

随机推荐

  1. Ubuntu下部署Portainer管理docker

    在上一篇文章中,我们部署了Shipyard来管理docker集群,总体比较简单,而且Shipyard界面风格很简约,还是比较喜欢的,但是正如提出的node节点无法显示bug,以及该项目早已停止维护,让 ...

  2. luogu P1904 天际线

    分析 都知道是从左向右扫描 可是该维护什么,扫描什么? 注意想想怎么输出, 实际上它要的输出就是图形的轮廓,即每个突出块的左上节点的x,y 所以说, 我们可以把扫描线扫进的楼房放入线段树,扫出的楼房删 ...

  3. 201871010134-周英杰《面向对象程序设计(java)》第十六周学习总结

    项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/ ...

  4. TensorFlow语法点滴

    1. tf.variable_scope生成一个上下文管理器,用于获取已经生成的变量 with tf.variable_scope('pnet'): data = tf.placeholder(tf. ...

  5. nginx 服务端口权限13的问题

    参考此文:https://blog.csdn.net/RunSnail2018/article/details/81185138

  6. [BZOJ1040][CODEVS1423][ZJOI2008]骑士

    题目描述 Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略 ...

  7. 微信小程序特性总结

    一. 小程序不是运行在浏览器中, 所以没有BOM和DOM对象 即console.log(window)和console.log(document)是获取不到任何内容的 二. 小程序特有的额外js成员( ...

  8. 总线宽度VS总线带宽

    很多人把计算机总线宽度和总线带宽混为一谈,其实他们是不一样的. 总线宽度:总线宽度一般指CPU中运算器与存储器之间进行互连的内部总线二进制位数,影响吞吐量,即下面说的总线位宽. 总线带宽:总线的带宽指 ...

  9. C++中二分法之upper_bound()、lower_bound、binary_search()函数

    前言 数组.容器vector都适用,在头文件"algorithm"中 下面的例子是针对容器的,注意返回的是距离元素3最近的指针it,输出的是*it结果为元素4,假如我想得到位置而非 ...

  10. 区间DP(超详细!!!)

    一.问题 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起,求最少消几次能消完整个序列,n≤500. f[i][j]表示消去区间[i,j]需要的最少次数. 则; 若a ...