• Qt+QGIS二次开发:读取矢量元素及其属性


    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
    
    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;
           }
        }
    }

    原文链接:Qgis开发12-读取矢量元素

  • 相关阅读:
    c# Queue实现生产者(Producer)消费者(Consumer)模式
    无法连接到已配置的web服务器
    2018年新年计划
    md5加密、Des加密对称可逆加密、RSA非对称可逆加密、https单边验证、银行U盾双边认证
    通过HTTP协议实时获取微信聊天记录
    c#委托与事件
    c#异步多线程
    详细解读PHP时区修改正确方法
    Mysql分库分表方案
    关于Windows下安装mongodb和加入Windows系统启动项
  • 原文地址:https://www.cnblogs.com/rainbow70626/p/10382411.html
Copyright © 2020-2023  润新知