Suite

Trouver des points dans des polygones avec des identifiants correspondants ?


Je suis assez nouveau dans l'utilisation de PyQgis, donc désolé si cette question est basique. Je travaille avec deux calques vectoriels :

(couche 1) Une série de polygones, chacun avec un champ ID spécifiant dans quel district géographique se trouve le polygone

(couche 2) Une série de points, également avec le même champ ID que ci-dessus

J'essaie de déterminer quels points de la couche 2 se trouvent dans un polygone avec un champ ID correspondant de la couche 1.

Pour commencer, j'ai décidé de boucler sur tous les polygones de la couche 1, et pour chaque polygone, de boucler sur tous les points de la couche 2 pour voir si les champs d'identification de chaque polygone/point correspondaient. Le champ ID dans la couche 1 est l'attribut numéro 10. Le champ ID correspondant dans la couche 2 est l'attribut numéro 1. Mon problème est que, dans le code suivant, seule la première entité de la couche 1 est bouclée. Ainsi, alors qu'il y a environ 200 polygones dans la couche 1, chacun avec un identifiant unique, le code ne boucle que sur un seul identifiant correspondant à un seul polygone.

Voici ce que j'ai :

layer1 = QgsVectorLayer('shapefile1_location', "polygon_layer") sinon layer1: print "La couche 1 n'a pas pu se charger!" layer2 = QgsVectorLayer('shapefile2_location', "points_layer") sinon layer2 : print "La couche 2 n'a pas pu se charger !" layer1 = iface.addVectorLayer('shapefile1_location', "polygon_layer", "ogr") layer2 = iface.addVectorLayer('shapefile2_location', "points_layer", "ogr") iter1 = layer1.getFeatures() iter2 = layer2.getFeatures() pour le polygone dans iter1 : pour le point dans iter2 : if polygon[10]==point[1] : print polygon[10], "Success!"

QgsVectorLayer.getFeatures()est un itérateur qui renvoie la valeur suivante chaque fois qu'il est appelé. Par conséquent, vous devez l'appeler à plusieurs reprises pour parcourir toutes les valeurs possibles.

Modifiez votre code comme suit :

pour le polygone dans layer1.getFeatures() : pour le point dans layer2.getFeatures() : si polygon[10]==point[1] : print polygon[10], "Success!"


Voir la vidéo: monikulmio (Octobre 2021).