Qgis开发10-缓冲区分析

Qgis开发-缓冲区分析

sf2gis@163.com

2014年8月25日

 

1  概述

缓冲区是指以几何实体为基础,以一定的半径在周围建立起的多边形。用于与周边地物叠加,解决邻近相关性问题。

参考:http://baike.baidu.com/view/1514858.htm

2  原理

缓冲区以给定的几何实现边界,向周围扩展指定的范围大小,从而形成缓冲区多边形。此多边形表示当前图形的邻近范围,与其它图形进行分析,可以解决邻近性问题。

3  方法

所有的几何操作都在QgsGeometry中进行。缓冲区只是其中一个部分。

缓冲区分析为QgsGeometry::buffer():可以指定相应的参数和样式等。返回结果为缓冲后的多边形。

如果进行dissolve,则会合并属性,否则,只是进行几何操作。

4  示例

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

2)       声明SLOT函数

//xx.h

    voidbuffer(void);

 

3)       连接action的Signal和SLOT

//xx.cpp

    connect(ui->actionBuffer,SIGNAL(triggered()),this,SLOT(buffer()));

4)       实现SLOT函数

//xx.cpp

/**

 *@briefMainWindow::buffer

 *

 *buffer.

 *@authorsf2gis@163.com

 *@date2014-08-2617:19:37

 */

voidMainWindow::buffer()

{

    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;

        }

 

        QgsGeometry*pGeo=f.geometry();

        QgsGeometry*pBuffer=pGeo->buffer(0.1,5);

        QgsRubberBand*pRubberBuffer= 
newQgsRubberBand(m_pMapCanvas,pBuffer->type());

        pRubberBuffer->addGeometry(pBuffer,NULL);

        pRubberBuffer->setColor(QColor(0,255,0));

        pRubberBuffer->setWidth(2);

        pRubberBuffer->setActive(true);

        return;

    }

 

}

 

 

转载自:https://blog.csdn.net/sf2gis2/article/details/39649565

You may also like...