QGIS选择与python相交的多边形

时间:2017-01-18 10:39:02

标签: polygon point qgis spatial-index

我是使用QGIS的新手,我所拥有的是点形文件和多边形shapefile。我想选择其中至少有一个点的所有多边形。我遇到的问题是需要多长时间。我有100万个点和大约320,000个多边形,因此使用空间查询需要太长时间。我听说我需要编写带有空间索引的python脚本来获得可行的快速结果,但我不知道如何处理这个问题。任何帮助将不胜感激。

我试图从其他堆栈溢出问题中拼凑出来的是:

pointProvider = self.pointLayer.dataProvider()
all_point = pointProvider.getFeatures()
delta = 0.1

for point in all_point:

    searchRectangle = QgsRectangle(point.x() - delta, point.y()  - delta, point.x() + delta, point.y() + delta)

    candidateIDs = line_index.intesects(searchRectangle)

    for candidateID in candidateIDs:
        candFeature == rotateProvider.getFeatures(QgsFeatureRequest(candidateID)).next()
        if candFeature.geometry().contains(point):

            break

这引发了一个NameError:name' self'未定义

1 个答案:

答案 0 :(得分:1)

我在GIS Stack Exchange上找到了答案,您可以找到here

我使用的代码是:

from qgis.core import *
import processing

layer1 = processing.getObject('MyPointsLayer')
layer2 = processing.getObject('MyPolygonsLayer')

index = QgsSpatialIndex() # Spatial index
for ft in layer1.getFeatures():
    index.insertFeature(ft)

selection = [] # This list stores the features which contains at least one point
for feat in layer2.getFeatures():
    inGeom = feat.geometry()
    idsList = index.intersects(inGeom.boundingBox())
    if idsList:
        selection.append(feat)

# Select all the polygon features which contains at least one point
layer2.setSelectedFeatures([k.id() for k in selection])