- voidPIEMainWindow::On_ActionLayoutReadRaster_Triggered(boolchecked)
- {
- SysCarto::RasterLayerPtrrasterLayerPtr= m_pCurrentControl->GetActiveView()->GetCurrentLayer();
- if(rasterLayerPtr==nullptr) return;
- SysDataSource::RasterDatasetPtrrasterDataSetPtr= rasterLayerPtr->GetDataset();
- intBandCount= rasterDataSetPtr->GetBandCount();
- SysDataSource::RasterBandPtrband= rasterDataSetPtr->GetRasterBand(0);
- SysDataSource::PixelDataTypebandType= band->GetRasterDataType();
- QVector<int> vectorBand;
- int* bandMap= newint[BandCount];
- for(inti= 0; i<BandCount; i++)
- {
- bandMap[i] = i+ 1;
- vectorBand.insert(i, i+ 1);
- }
- SysDataSource::PixelBufferPtrbuffer= rasterDataSetPtr->Read(0, 0, 500, 500, 500, 500, vectorBand);
- /* 将读取到的数据, 写入内存数据集, 并加载至图层 */
- SysDataSource::RasterDatasetPtrnewDataSet= SysDataSource::DatasetFactory::Instance()->CreateRasterDataset("", 500, 500, BandCount, rasterDataSetPtr->GetRasterBand(0)->GetRasterDataType(),"MEM");
- double* geo= newdouble[6];
- rasterDataSetPtr->GetGeoTransform(geo);
- newDataSet->SetSpatialReference(rasterDataSetPtr->GetSpatialReference());
- newDataSet->SetGeoTransform(geo);
- boolflag= newDataSet->Write(0, 0, 500, 500, buffer->GetData(), 500, 500, bandType, BandCount, bandMap);
- if(flag)
- {
- SysCarto::RasterLayerPtrnewLayer= SysCarto::LayerFactory::Instance()->CreateDefaultRasterLayer(newDataSet);
- newLayer->SetName("内存图层");
- m_pCurrentControl->GetMap()->AddLayer(newLayer);
- m_pCurrentControl->GetActiveView()->Refresh();
- }
- }
来源: http://www.bubuko.com/infodetail-3438233.html