Qgis开发12-读取矢量元素

来源:互联网 发布:c语言从小到大输出 编辑:程序博客网 时间:2024/05/19 19:42

Qgis开发-读取矢量元素

sf2gis@163.com

2014年8月26日

 

1  概述

矢量图层内矢量元素组成,矢量图层的加载由驱动实现,驱动必须实现对矢量图层内元素的读写操作功能。

2 原理

矢量元素包含几何和属性两部分组成。几何部分用于提供图形相关内容。属性部分提供与几何相关联的属性内容。属性包含属性名和属性值。

 

3 方法

QgsFeature是矢量元素的抽象。QgsGeometry是几何部分的抽象。属性部分的属性名由QgsFields(是QgsField的集合操作类)抽象。属性值由QgsAttributes抽象。

1)   在矢量图层获取元素时,QgsVectorLayer::getFeature()完成操作。getFeature()会返回元素操作对象(QgsFeatureIterator)。

2)   QgsFeatureIterator是一个QgsAbstractFeatureInterator的包装类,由其组成(不是继承)。

3)   为了获取矢量图层元素,需要构造一个QgsAbstractFeatureIterator的子类对象,来构造QgsFeatureIterator。而驱动提供的,能够获取元素的类只有QgsAbstractFeatureSource的子类。QgsAbstractFeatureFromSource<T>则是一个继承自QgsAbstractFeatureIterator,操作QgsAbstractFeatureSource的类。所以此时,需要生成一个QgsAbstractFeatureIteratorFromSource的子类对象来构造。

4)   由矢量图层驱动实现的QgsAbstractFeatureIterator子类(其实是QgsAbstractFeatureIteratorFromSource的子类)QgsVectorLayerFeatureIterator操作QgsAbstractFeatureSource子类QgsVectorLayerFeatureSource。从而可以构造QgsFeatureIterator。

4 示例

1)       添加相应的action和界面元素

2)       添加相应的slot处理函数

//xx.h

    voidfeatureio(void);

 

3)       将action的signal和slot连接

//xx.cpp

    connect(ui->actionFeatureio,SIGNAL(triggered()),this,SLOT(featureio()));

4)       实现SLOT

//xx.cpp

/**
*@briefMainWindow::featureio
*
*readfeatureattribute.
*@authorsf2gis@163.com
*@date2014-08-2616:27:24
*/
voidMainWindow::featureio()
{
    QgsVectorLayer*pVectorLayer=(QgsVectorLayer*)m_pMapCanvas->currentLayer();
    QgsFeatureIteratorfeatureIt=pVectorLayer->getFeatures();
    featureIt.rewind();
 
    QgsFeatureIdsids;
    QgsFeaturef;
    while(featureIt.nextFeature(f))
    {
        constQgsFields*pFields=f.fields();
        ids<<f.id();
 
        for(inti=0;i<pFields->size();++i){
            qDebug()<<"Feild["<<i<<"]="<<pFields->at(i).name()<<endl;
            qDebug()<<"Attribute["<<i<<"]="<<f.attribute(i).toString()<<endl;
        }
 
    }
}

 

 

5 带有属性的地理实体抽象QgsFeature

参见:Qgis开发11-地理实体抽象.docx

6 相关类

6.1 QgsGeometry

参见:Qgis相关类参考.docx

 

 

 

0 0
原创粉丝点击