QGis二次开发,加载矢量shp,路网数据,tig栅格数据 5级世界地图

在这里插入图片描述
在这里插入图片描述

首先环境已经配置好。看我上一篇怎么配置
在这里插入图片描述



#if 1
#include "mainwindow.h"
#include<QApplication>
#include<QWidget>

#include <qgsapplication.h>
#include <qgsproviderregistry.h>

int main(int argc, char *argv[])
{


    // 参数三: 如果需要GUI应用程序,则设置为true;对于仅控制台应用程序,设置false
    QgsApplication a(argc, argv, true);
    QgsApplication::setPrefixPath("C:OSGeo4W/install/apps/qgis-ltr", true);		// 设置qgis路径
    QgsApplication::setPluginPath("C:OSGeo4W/install/apps/qgis-ltr/plugins");	// 设置插件路径
    QgsApplication::initQgis();																	// 初始化QGis

    MainWindow w;
   // w.loadShapeFile();
    w.slotAddRasterLayerSet();

    return a.exec();
}

#endif

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include<qgsmapcanvas.h>
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    //加载矢量数据
    void loadShapeFile();

    // 添加栅格图层集
    void slotAddRasterLayerSet();

#if 0
    void openVector();
    void delImage();
    void delVector();
#endif

private:
    //画布元素
    QgsMapCanvas canvas;
    QList<QgsMapLayer *> layers;

};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include<qgsvectorlayer.h>
#include<qdebug.h>

#include<QFileDialog>
#include<QMessageBox>
#include"QgsRasterLayer.h"



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
}

MainWindow::~MainWindow()
{
}



void MainWindow::loadShapeFile(){
    //实例化矢量图层 通过准备好的矢量文件绝对路径来初始化

    QgsVectorLayer* pVectorLayer = new QgsVectorLayer("D:/zhuomian/ycn/qt/untitled2/neimeng_road/neimeng_road.shp","地区");
    //检查一下是否成功
    qDebug()<<"Is layer valid:"<<pVectorLayer->isValid();
    //将该图层放入画布里
    canvas.setLayers(QList<QgsMapLayer*>()<<pVectorLayer);
    //画布也是QWidget的子类,可以设置标题
    canvas.setWindowTitle("QGIS二次开发:画布");
    canvas.show();
    //设置画布大小,来达到可见图层的完整范围
    canvas.zoomToFullExtent();
}

void MainWindow::slotAddRasterLayerSet()
{

    // 创建光栅层对象并加入本地文件
    QgsRasterLayer *qRasterLayer = new QgsRasterLayer("D:/zhuomian/ycn/qt/untitled2/233/233_Level_5.tif", "raster");
    //检查一下是否成功
    if (!qRasterLayer || !qRasterLayer->isValid()) { return ; }
    qRasterLayer->setContrastEnhancement(QgsContrastEnhancement::StretchToMinimumMaximum, QgsRasterMinMaxOrigin::MinMax);

    //将该图层放入画布里
    canvas.setLayers(QList<QgsMapLayer*>()<<qRasterLayer);
    //画布也是QWidget的子类,可以设置标题
    canvas.setWindowTitle("QGIS二次开发:画布");
    canvas.show();
    //设置画布大小,来达到可见图层的完整范围
    canvas.zoomToFullExtent();

}

#if 0
void MainWindow::openVector(){
    QgsVectorLayer *my_layer;
    QString fileName = QFileDialog::getOpenFileName(this,tr("Open image file"),"","*.shp");
    QStringList temp = fileName.split('/');
    QString basename = "shpFile";
    my_layer = new QgsVectorLayer(fileName,basename,"ogr");
    if(!my_layer->isValid()){
        QMessageBox::critical(this,"erroe",QString("layer is invalid:\n")+fileName);
    }
    layers.push_front(my_layer);
    mapCanvas->setExtent(my_layer->extent());
    mapCanvas->setLayers(layers);
    mapCanvas->refresh();
}
void MainWindow::delImage(){
    for(int i = 0;i<layers.size();i++){
        if(layers[i]->name() == "tifFile"){
            layers.removeAt(i);
            mapCanvas->setLayers(layers);
            mapCanvas->refresh();
            return;
        }
    }
}
void MainWindow::delVector(){
    for(int i = 0;i<layers.size();i++){
        if(layers[i]->name() == "shapFile"){
            layers.removeAt(i);
            mapCanvas->setLayers(layers);
            mapCanvas->refresh();
            return;
        }
    }
}
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值