PIE-SDK For C++打开自定义栅格数据

摘要:
以下显示了自定义网格数据与图像数据的抠图算法的应用。

1、数据介绍

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

2、实现思路及原理说明

第一步

打开原始栅格数据;

第二步

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

第三步

建立栅格内存数据集;

第四步

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

第五步

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

第六部

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

3、核心接口与方法

接口/

方法

说明

SysDataSource::RasterDatasetPtr

GetBandCount()

获取波段个数

GetRasterBand()

获取指定索引的波段

Read()

将数据读取至内存中

Write()

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

SetGeoTransform

设置六参数

SpatialReference

空间参考

GetGeoTransform

获取六参数

SysDataSource::DatasetFactory

CreateRasterDataset()

创建栅格数据集

4、示例代码

项目名称

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

数据位置

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

视频位置

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

示例代码

方法(一)打开自定义栅格数据

voidPIEMainWindow::On_ActionGetMemRaster_Triggered(boolchecked)

{

    SysCarto::RasterLayerPtrrasterLayerPtr = m_pCurrentControl->GetActiveView()->GetCurrentLayer();

    if (rasterLayerPtr==nullptr) return;

    //1、获取源Dataset

    SysDataSource::RasterDatasetPtrsourceRasterPtr = rasterLayerPtr->GetDataset();

    intmWidth = 500;

    intmHeigh = 600;

    intcount = sourceRasterPtr->GetBandCount();

    double* geoTrans = newdouble[6];

    sourceRasterPtr->GetGeoTransform(geoTrans);

    QVector<int> bandMap;

    int* bandList = newint[count];

    

    for (inti=0;i<count;i++)

    {

        bandMap.insert(i, i + 1);

        bandList[i] = i + 1;

    }

    //2、读取数据至内存

    SysDataSource::PixelBufferPtrbufferPtr=sourceRasterPtr->Read(0, 0, mWidth, mHeigh, mWidth, mHeigh, bandMap);

    //3、创建内存数据集

    SysDataSource::RasterDatasetPtrmemRasterPtr = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", mWidth, mHeigh, count,

        sourceRasterPtr->GetRasterBand(0)->GetRasterDataType(), "MEM");

    if (memRasterPtr!=nullptr)

    {

        boolok=memRasterPtr->Write(0, 0, mWidth, mHeigh, bufferPtr->GetData(), mWidth, mHeigh, sourceRasterPtr->GetRasterBand(0)->GetRasterDataType(),

            count, bandList);

        if (ok)

        {

            //4、设置空间参考和仿射变换参数

            memRasterPtr->SetSpatialReference(sourceRasterPtr->GetSpatialReference());

            memRasterPtr->SetGeoTransform(geoTrans);

 

            SysCarto::LayerPtrmemLayer = SysCarto::LayerFactory::CreateDefaultRasterLayer(memRasterPtr);

            memLayer->SetName("内存图层");

            m_pCurrentControl->GetMap()->AddLayer(memLayer);

            m_pCurrentControl->GetActiveView()->Refresh();

        }

    }

}

5、示例截图

前后对比图如下

PIE-SDK For C++打开自定义栅格数据第1张

PIE-SDK For C++打开自定义栅格数据第2张

免责声明:文章转载自《PIE-SDK For C++打开自定义栅格数据》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Android 接入支付宝支付实现使用yum安装php72下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MODIS系列之NDVI(MOD13Q1)九:单一土地类型NDVI及时序图(以耕地类型为例)

单一土地类型耕地NDVI及耕地时序图 在 MODIS系列之NDVI(MOD13Q1)五:NDVI处理流程 和 MODIS系列之NDVI(MOD13Q1)七:时间序列S-G滤波之Python  处理的都是地表各土地类型的NDVI综合。  本次博文则以单一土地类型(以耕地类型为例)得出耕地的NDVI及时序图 一、所需数据 1.研究区域和时间(年份)的土地利用类...

ArcGIS地形分析

ArcGIS地形分析的基本步骤如下: 1. 整理并添加带有高程属性的CAD等高线或者高程点; 2. 将导入的等高线或高程点数据转换为GIS可编辑的Shapefile文件; 3. 使用整理好的Shapefile生产数字高程三角模型TIN文件; 4. 将TIN文件转换为栅格数字高程模型DEM文件; 5. 基于DEM即可进一步进行基于地形的坡度、坡向、起伏度、汇...

ArcMap 1 矢量数据和栅格数据

GIS概念中有相当多的数据文件格式,我们经常接触到的数据格式可以大致分为“栅格数据”与“矢量数据”这两类。这两类数据分别对应着不同的应用场景,我们通常使用“栅格数据”来当作底图,示意地理构造物(如山地、河流、湖泊、建筑物、道路等)的空间形态(如形状、位置、大小等),并可以进行一些简易的空间分析;使用“矢量数据”来参与业务逻辑的实现与分析,进行复杂的空间分析...

(七)WebGIS中栅格、矢量图层设计之栅格、矢量图层的本质

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.何为栅格数据,何为矢量数据? 在GIS中,对于数据格式的分类,我们一般会将其分为栅格数据和矢量数据两种类型。栅格数据是将空间看做离散的像元,由二维数组或者其他数据组织方式来进行表达。矢量数据恰恰相反,它将空间看成是连续的,用...

ArcGIS Engine栅格数据使用总结

jojojojo2002 原文 ArcGIS Engine栅格数据使用总结 简介:ArcGIS Engine栅格数据使用总结,一个栅格数据集由一个或者多个波段(RasterBand)的数据组成,一个波段就是一个数据矩阵。对于格网数据(DEM数据)和单波段的影像数据,表现为仅仅只有一个波段数据的栅格数据集,而对于多光谱影像数据则表现为具有多个波段的栅格数据...

C#+arcengine获得栅格数据的像素值(高程)

此文问获得栅格数据的像元值(即高程),有可能部分见解不到位,望大神看到了不惜指教! /// <summary> /// 得到高程(通过像素值) /// </summary> /// <param name="maskTifPath">Raster路径</param> private List<int&g...