Suite

Pyqgis : "a.geometry().intersects(b.geometry())" ne trouverait aucune intersection mais devrait le faire. Pourquoi?

Pyqgis :


Je m'apprends à pyqgis et j'essaie de trouver ces polygones dans une couche qui se croisent avec des polygones dans une autre couche. Cela semble très trivial, et sur GIS.SE, plusieurs questions similaires me suggèrent (avec mes connaissances limitées en python/pyqgis) que cela devrait fonctionner :

#ausschluss et gebaeude sont des QgsVectorLayers avec des polygones #(shapefiles avec le même crs et se croisant clairement) gebaeude.setSelectedFeatures([]) #désélectionne tout selections=[] #déclare qu'il s'agit d'une liste pour f dans gebaeude.getFeatures() : pour un dans ausschluss.getFeatures() : if a.geometry().intersects(f.geometry()) : #même résultat avec .within() et même avec a et f commuté (les docs ne sont pas si clairs là-dessus) sélections .append( f.id() ) break #une seule intersection ou moins est possible gebaeude.setSelectedFeatures(selections) gebaeude.invertSelection() #donne 0, 78137 et 78137 (aucune intersection trouvée) print len(selections) print gebaeude.selectedFeatureCount () imprimer gebaeude.featureCount()

Qu'est-ce que c'est, je fais mal?

Edit: Exécuter QGis 2.8.3 sur OS X (10.8.5) avec le KyngChaos-Longterm-Built


J'ai utilisé une situation plus triviale (la fonction jaune indique qu'elle a été sélectionnée) pour tester votre code modifié :

Mon code était :

mapcanvas = iface.mapCanvas() couches = mapcanvas.layers() print couches[0].name() #gebaeude print couches[1].name() #ausschluss selections=[] #déclare qu'il s'agit d'une liste pour f dans les couches [0].getFeatures() : pour un in layer[1].getFeatures() : si a.geometry().intersects(f.geometry()): intersection = a.geometry().intersection(f.geometry( )) print intersection.exportToWkt() # même résultat avec .within() et même avec a et f commutés (les docs ne sont pas si claires à ce sujet) selections.append( f.id() ) break #un seul ou moins l'intersection est possible len d'impression (sélections) couches d'impression[0].selectedFeatureCount() #Il a été sélectionné couches d'impression[1].featureCount()

et il a couru je m'y attendais.

Les résultats sur la console Python étaient :

gebaeude ausschluss Polygone ((355710.56858536007348448 4472539.63295774068683386, 355785.63899155310355127 4472539.63295774254947901, 355785.0478859927970916 4472464.56255155056715012.355711.75072471020191503186), 355785.0478859927970916 4472464.56255155056715012.

Le polygone en notation WKT était gebaude (corroboré avec QuickWKT brancher). J'espère que ça aide.


Voir la vidéo: Construindo suas ferramentas no QGIS usando Python