Qt+QGis二次開發:加載柵格圖層和矢量圖層


一、加載柵格圖像

加載柵格圖像的詳細步驟在下面代碼里:

//添加柵格數據按鈕槽函數
void MainWindow::addRasterlayers()
{
    //步驟1:打開文件選擇對話框
    QString filename=QFileDialog::getOpenFileName(this,tr("打開柵格數據"),"","remote sensing image(*.tif *.tiff);;image(*.jpg *.jpeg *.png *.bmp)");
    if(filename.isNull())//如果未選擇文件則返回
        return;

    QFileInfo fi(filename);
    QString basename=fi.baseName();//獲取柵格數據名稱
    //步驟2:創建QgsRasterLayer類
    QgsRasterLayer*  rasterLayer=new QgsRasterLayer(filename,basename,"gdal",false);
    if(!rasterLayer->isValid())//如果圖層不合法
    {
        QMessageBox::critical(this,"error","圖層無效!");
        return;
    }
    //步驟3:注冊添加柵格數據,並個並添加到畫布中
    QgsMapLayerRegistry::instance()->addMapLayer(rasterLayer);
    m_mapCanvasLayerSet.append(rasterLayer);
    m_mapCanvas->setExtent(rasterLayer->extent());//設置顯示范圍。Extent:范圍、尺度
    m_mapCanvas->setLayerSet(m_mapCanvasLayerSet);//設置圖層集合
    m_mapCanvas->setVisible(true);//設置是否可見
    m_mapCanvas->freeze(false);//設置是否凍結對圖層的操作
    m_mapCanvas->refresh();//刷新
    //在狀態條設置地圖的比例尺
    double dCurrScale= m_mapCanvas->scale();
    QString sCurrScale=this->m_scaleEdit->toString(dCurrScale);
    this->m_scaleEdit->setScaleString(sCurrScale);
}

二、加載矢量圖層

加載矢量圖層跟柵格圖層差不多的步驟,這里矢量圖層指的是shp文件。具體代碼如下:

//添加矢量數據小按鈕槽函數
void MainWindow::addVectorlayers()
{
    //步驟1:打開文件選擇對話框
    QString filename=QFileDialog::getOpenFileName(this,tr("打開矢量數據"),"","ESRI Shapefile(*.shp)");
    if(filename.isNull())//如果未選擇文件則返回
        return;
    QFileInfo fi(filename);
    QString basename=fi.baseName();//獲取文件基名稱
    //步驟2:創建QgsVectorLayer類
    QgsVectorLayer* vecLayer=new QgsVectorLayer(filename,basename,"ogr",false);
    if(!vecLayer->isValid())//如果圖層不合法
    {
        QMessageBox::critical(this,"error","圖層無效!");
        return;
    }
    //步驟3:注冊添加矢量數據,並個並添加到畫布中
    QgsMapLayerRegistry::instance()->addMapLayer(vecLayer);

    //設置該圖層的單一渲染風格
    QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol(vecLayer->geometryType());//QGis::GeometryType::Polygon
    symbol->setColor(QColor(100,100,156,255));
    vecLayer->setRendererV2( new QgsSingleSymbolRendererV2(symbol) );

    m_mapCanvasLayerSet.append(vecLayer);
    m_mapCanvas->setExtent(vecLayer->extent());//設置顯示范圍。Extent:范圍、尺度
    m_mapCanvas->setLayerSet(m_mapCanvasLayerSet);//設置圖層集合
    m_mapCanvas->setVisible(true);//設置是否可見
    m_mapCanvas->freeze(false);//設置是否凍結對圖層的操作
    m_mapCanvas->refresh();//刷新
    //在狀態條設置地圖的比例尺
    double dCurrScale= m_mapCanvas->scale();//world.shp文件默認打開的比例尺為:91329159:1
    QString sCurrScale=this->m_scaleEdit->toString(dCurrScale);

    this->m_scaleEdit->setScaleString(sCurrScale);
}

參考鏈接:

1、QGis(一)加載柵格圖層和矢量圖層

2、Qgis開發3-加載矢量、柵格圖層

3、QGis 二次開發基礎 -- 顯示數據


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM