本讲主要实现了加载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()
第四步:最后运行效果图如下所示: