PIE-SDK For C++栅格数据集的读写
1.功能简介
栅格数据包含很多信息,在数据的运用中需要对数据的信息进行读取或写入,目前PIE SDK支持多种数据格式的数据读取和写入,下面对栅格数据格式的数据读写功能进行介绍。
2.功能实现说明
2.1. 实现思路及原理说明
第一步 |
获取要读取的栅格数据 |
第二步 |
读取栅格数据 |
第三步 |
写入栅格数据并赋值投影 |
2.2. 核心接口与方法
接口/类 |
方法/属性 |
说明 |
RasterDatasetPtr |
GetBandCount() |
获取波段数 |
GetRasterBand(int nIndex) |
获取栅格波段对象 |
|
GetRasterDataType() |
获取栅格数据类型 |
|
Read(int nx, int ny, int nWid, int nHei, int nBufXSize, int nBufYSize, const QVector<int>& bandMap) |
栅格数据集读取数据 |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/12栅格数据集的读写 |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据/04.World/World.tif |
视频路径 |
百度云盘地址下/PIE视频教程/04数据操作/12栅格数据集的读写.avi |
示例代码 |
|
void PIEMainWindow::On_ActionLayoutReadRaster_Triggered(bool checked) { SysCarto::RasterLayerPtr rasterLayerPtr = m_pCurrentControl->GetActiveView()->GetCurrentLayer(); if (rasterLayerPtr == nullptr) return; SysDataSource::RasterDatasetPtr rasterDataSetPtr = rasterLayerPtr->GetDataset(); int BandCount = rasterDataSetPtr->GetBandCount(); SysDataSource::RasterBandPtr band = rasterDataSetPtr->GetRasterBand(0); SysDataSource::PixelDataType bandType= band->GetRasterDataType();
QVector<int> vectorBand; int* bandMap = new int[BandCount]; for (int i = 0; i < BandCount; i++) { bandMap[i] = i + 1; vectorBand.insert(i, i + 1); } SysDataSource::PixelBufferPtr buffer= rasterDataSetPtr->Read(0, 0, 500, 500, 500, 500, vectorBand);
/*将读取到的数据,写入内存数据集,并加载至图层*/ SysDataSource::RasterDatasetPtr newDataSet = SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", 500, 500 , BandCount, rasterDataSetPtr->GetRasterBand(0)->GetRasterDataType(), "MEM"); double* geo = new double[6]; rasterDataSetPtr->GetGeoTransform(geo); newDataSet->SetSpatialReference(rasterDataSetPtr->GetSpatialReference()); newDataSet->SetGeoTransform(geo); bool flag = newDataSet->Write(0, 0, 500, 500, buffer->GetData(), 500, 500, bandType, BandCount, bandMap); if (flag) { SysCarto::RasterLayerPtr newLayer = SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(newDataSet); newLayer->SetName("内存图层"); m_pCurrentControl->GetMap()->AddLayer(newLayer); m_pCurrentControl->GetActiveView()->Refresh(); } } |