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

Find neighbouring polygons in Python QGIS

我正在使用我找到的代码,并为我的目的稍作修改。问题是,它并没有完全按照我的意愿行事,我一直在想通过更改来修复它。

我正在搜索所有共享公共边界(一条线)的相邻多边形,而不是一个点

我的目标:135/12 与 319/2 135/4、317 相邻,但与 320/1 不相邻

在我 运行 我的脚本

之后,我在 QGIS table 中得到了什么

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.'

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