文章目录
本讲主要实现了加载raster数据功能
主要用到的类是qgsrasterlayer,代码是在第二讲的基础上进行修改完成的。
第一步:修改qgis2.h文件,增加以下头文件
//4th 代码 #include <qgsrasterlayer.h> #include <qmessagebox.h>
第二步:修改qgis2.cpp文件,主要修改addlayer函数,修改后的代码如下:
//4th 代码 QFileInfo myRasterFileInfo("../data/Abarema_jupunba_projection.tif"); QgsRasterLayer *mypLayer = new QgsRasterLayer(myRasterFileInfo.filePath(),myRasterFileInfo.completeBaseName()); if (mypLayer->isValid()) { QMessageBox::information(NULL,QString(tr("加载图层")),QString(tr("加载成功")),QMessageBox::Yes|QMessageBox::No); mypLayer->setDrawingStyle(QgsRasterLayer::SingleBandPseudoColor); mypLayer->setColorShadingAlgorithm(QgsRasterLayer::PseudoColorShader); mypLayer->setContrastEnhancementAlgorithm(QgsContrastEnhancement::StretchToMinimumMaximum,false); QList<QgsMapCanvasLayer> myLayerSet; QgsMapLayerRegistry::instance()->addMapLayer(mypLayer,TRUE); mpMapCanvas->setExtent(mypLayer->extent()); myLayerSet.append(QgsMapCanvasLayer(mypLayer)); mpMapCanvas->setLayerSet(myLayerSet); } else { QMessageBox::information(NULL,QString(tr("加载图层")),QString(tr("加载失败")),QMessageBox::Yes|QMessageBox::No ); }
备注:(1)baseName和completeBaseName的区别:baseName返回的字符不包含“.”;而completeBaseName返回的字符不包含最后一个“.”之后的字符。
第三步:修改main函数,来支持中文显示,代码如下:
QgsApplication a(argc, argv,TRUE); QTextCodec *codec = QTextCodec::codecForName("System"); QTextCodec::setCodecForCStrings(codec); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForTr(codec); qgis2 w; w.show(); return a.exec()