我正在使用我找到的代码,并根据我的目的稍作修改。问题是,它并没有完全符合我的要求,而且我仍然坚持要改变它来修复它。
我正在搜索所有相邻的多边形,这些多边形有共同点(一条线),这不是一个点
我的目标:135/12与319/2 135 / 4,317是neigbour但不是320/1
运行脚本后,我在QGIS表中得到的内容
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 :(得分:1)
我找到了一些解决方法。在使用我的脚本之前,我创建了一个小的(为了我的目的,0,01米足够)缓冲所有关节周围。稍后,我使用差异工具从我的主图层中删除缓冲区域,从而删除不需要的相邻多边形。使用代码现在工作正常