在Python QGIS中查找相邻的多边形

时间:2017-04-25 11:04:37

标签: python polygon intersection qgis

我正在使用我找到的代码,并根据我的目的稍作修改。问题是,它并没有完全符合我的要求,而且我仍然坚持要改变它来修复它。

我正在搜索所有相邻的多边形,这些多边形有共同点(一条线),这不是一个点enter image description here

我的目标:135/12与319/2 135 / 4,317是neigbour但不是320/1

运行脚本后,我在QGIS表中得到的内容

enter image description here

NEIGBOURS是相邻的多边形,

SUM是相邻多边形的数量

我使用的代码还包括320/1作为相邻多边形。如何解决?

    from qgis.utils import iface
    from PyQt4.QtCore import QVariant
    _NAME_FIELD = 'Nr'
    _SUM_FIELD = 'calc'
    _NEW_NEIGHBORS_FIELD = 'NEIGHBORS'
    _NEW_SUM_FIELD = 'SUM'
    layer = iface.activeLayer()
    layer.startEditing()
    layer.dataProvider().addAttributes(
            [QgsField(_NEW_NEIGHBORS_FIELD, QVariant.String),
             QgsField(_NEW_SUM_FIELD, QVariant.Int)])
    layer.updateFields()
    feature_dict = {f.id(): f for f in layer.getFeatures()}

    index = QgsSpatialIndex()
    for f in feature_dict.values():
        index.insertFeature(f)
    for f in feature_dict.values():
        print 'Working on %s' % f[_NAME_FIELD]
        geom = f.geometry()

        intersecting_ids = index.intersects(geom.boundingBox())

        neighbors = []
        neighbors_sum = 0
        for intersecting_id in intersecting_ids:
            intersecting_f = feature_dict[intersecting_id]

            if (f != intersecting_f and
                not intersecting_f.geometry().disjoint(geom)):
                neighbors.append(intersecting_f[_NAME_FIELD])
                neighbors_sum += intersecting_f[_SUM_FIELD]
        f[_NEW_NEIGHBORS_FIELD] = ','.join(neighbors)
        f[_NEW_SUM_FIELD] = neighbors_sum
        layer.updateFeature(f)

    layer.commitChanges()
    print 'Processing complete.'

1 个答案:

答案 0 :(得分:1)

我找到了一些解决方法。在使用我的脚本之前,我创建了一个小的(为了我的目的,0,01米足够)缓冲所有关节周围。稍后,我使用差异工具从我的主图层中删除缓冲区域,从而删除不需要的相邻多边形。使用代码现在工作正常