2017-01-18 66 views
0

我对使用QGIS非常陌生,我拥有的是一个shape shape文件和一个多边形shape文件。我想选择其中至少有一个点的所有多边形。我遇到的问题是需要多长时间。我有100万个点和大约32万个多边形,所以使用空间查询需要很长时间。我听说我需要编写一个带有空间索引的Python脚本来获得一个可行的快速结果,但我不知道如何解决这个问题。任何帮助将不胜感激。QGIS选择与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:名字“自我”是没有定义

回答

0

我找到答案了基于GIS堆栈交换,这你可以找到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])