Qgis二次开发-QgsMapLayer(加载矢量、栅格图层)

1.简介

QgsMapLayer是所有地图层类型的基类,这是所有地图层类型(矢量,栅格)的基类,首先定义一个QgsMapCanvas地图画布,然后画布上添加图层,使用以下方法设置图层集合。

//设置当前图层集合
void setLayers (const QList< QgsMapLayer * > &layers)

以下是QgsMapLayer的类继承:

Qgis二次开发-QgsMapLayer(加载矢量、栅格图层)_第1张图片

  • QgsAnnotationLayer:标注的图层
  • QgsMeshLayer:表示支持在结构化或非结构化网格上显示数据的网格层 。
  • QgsPluginLayer:插件层的基类
  • QgsRasterLayer:表示栅格层
  • QgsVectorLayer:矢量图层
  • QgsVectorTileLayer:专门用于渲染矢量贴图

2.常用方法

//设置图层的显示名称
void setName (const QString &name)

//设置图层图例的URL
void setLegendUrl (const QString &legendUrl)

//为地图层指定一个图例管理器
void setLegend (QgsMapLayerLegend *legend)

//设置数据url
void setDataUrl (const QString &dataUrl)

//返回层的数据提供程序,它可以是nullptr
const QgsDataProvider *dataProvider () const

//返回层的范围。
virtual QgsRectangle extent () const

//返回层的唯一ID,用于从QgsProject访问该层。
QString id () const

//返回层的状态
bool isValid () const

//返回图层的显示名称
QString name () const

3.示例

加载栅格图层

QList m_layers;
 
//添加栅格数据按钮槽函数
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:注册添加栅格数据,并个并添加到画布中
    m_layers.append(rasterLayer);
    m_mapCanvas->setExtent(rasterLayer->extent());//设置显示范围。Extent:范围、尺度
    m_mapCanvas->setLayerSet(m_layers);//设置图层集合
    m_mapCanvas->setVisible(true);//设置是否可见
    m_mapCanvas->freeze(false);//设置是否冻结对图层的操作
    m_mapCanvas->refresh();//刷新
}

加载矢量图层


QList m_layers;
 
//添加矢量数据小按钮槽函数
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:注册添加矢量数据,并个并添加到画布中
    //设置该图层的单一渲染风格
    QgsSymbolV2* symbol = QgsSymbolV2::defaultSymbol(vecLayer->geometryType());//QGis::GeometryType::Polygon
    symbol->setColor(QColor(100,100,156,255));
    vecLayer->setRendererV2( new QgsSingleSymbolRendererV2(symbol) );
 
    m_layers.append(vecLayer);
    m_mapCanvas->setExtent(vecLayer->extent());//设置显示范围。Extent:范围、尺度
    m_mapCanvas->setLayers(m_layers);//设置图层集合
    m_mapCanvas->setVisible(true);//设置是否可见
    m_mapCanvas->freeze(false);//设置是否冻结对图层的操作
    m_mapCanvas->refresh();//刷新
}

4.相关参考

Qgis二次开发-QgsAnnotationItem(添加文字、svg标注)_Mr.codeee的博客-CSDN博客

Qgis二次开发-QgsMapCanvas画布简介_Mr.codeee的博客-CSDN博客 

Qgis二次开发-QgsRubberBand详解(画线、画多边形)_Mr.codeee的博客-CSDN博客 

Qgis二次开发-QgsAnnotationItem(添加文字、图片标注(支持svg、png、jpg等常用图片格式))_Mr.codeee的博客-CSDN博客 

你可能感兴趣的:(Qgis,qt,qgis,QgsMapLayer,栅格图层,矢量图层)