2017-01-18 8 views
0

Je suis très novice dans l'utilisation de QGIS, j'ai un fichier de formes de points et un fichier de formes de polygones. Je voudrais sélectionner tous les polygones qui ont au moins un point en eux. Le problème que je rencontre est combien de temps cela prend. J'ai 1 million de points et environ 320 000 polygones, donc utiliser la requête spatiale prend beaucoup trop de temps. J'ai entendu dire que je devrais écrire un script python avec indexation spatiale pour obtenir un résultat rapidement réalisable, mais je n'ai aucune idée de la façon d'aborder cela. Toute aide serait grandement appréciée.QGIS Sélectionner des polygones qui croisent des points avec python

Ce que j'ai essayé de concocter d'autres questions débordement de la pile est:

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 

Cela jette un NameError: nom « soi » ne définit pas

Répondre

0

J'ai trouvé une réponse sur le SIG Stack Exchange que vous pouvez trouver here

Le code j'ai utilisé était:

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])