Mehr

Pyqgis: „a.geometry().intersects(b.geometry())“ würde keine Schnittpunkte finden, sollte es aber. Wieso den?

Pyqgis: „a.geometry().intersects(b.geometry())“ würde keine Schnittpunkte finden, sollte es aber. Wieso den?


Ich bringe mir Pyqgis bei und versuche, die Polygone in einer Ebene zu finden, die sich mit Polygonen in einer anderen Ebene schneiden. Es scheint sehr trivial, und auf GIS.SE gibt es mehrere ähnliche Fragen, die mir (mit meinem begrenzten Python/pyqgis-Wissen) nahelegen, dass dies funktionieren sollte:

#ausschluss und gebaeude sind QgsVectorLayers with Polygons #(Shapefiles mit dem gleichen crs und deutlich überschneidend) gebaeude.setSelectedFeatures([]) #deselects Everything selections=[] #deklariert es als Liste für f in gebaeude.getFeatures(): for a in ausschluss.getFeatures(): if a.geometry().intersects(f.geometry()): #gleiches Ergebnis mit .within() und sogar mit a und f vertauschten (die Dokumentation ist da nicht so klar) Auswahl .append( f.id() ) break #nur ein oder weniger Schnittpunkt möglich gebaeude.setSelectedFeatures(selections) gebaeude.invertSelection() #gibt 0, 78137 und 78137 (kein Schnittpunkt gefunden) print len(selections) print gebaeude.selectedFeatureCount () gebaeude.featureCount() drucken

Was ist, mache ich falsch?

Bearbeiten: Ausführen von QGis 2.8.3 unter OS X (10.8.5) mit dem KyngChaos-Longterm-Built


Ich habe eine trivialere Situation verwendet (gelbe Funktion zeigt an, dass sie ausgewählt wurde), um Ihren modifizierten Code zu testen:

Mein Code war:

mapcanvas = iface.mapCanvas()layer = mapcanvas.layers() printlayer[0].name() #gebaeude printlayer[1].name() #ausschluss selections=[] #deklariert es ist eine Liste für f in Layern [0].getFeatures(): für a in Schichten[1].getFeatures(): wenn a.geometry().intersects(f.geometry()): Kreuzung = a.geometry().intersection(f.geometry( )) print section.exportToWkt() #gleiches Ergebnis mit .within() und sogar mit a und f vertauscht (die Dokumentation ist da nicht so klar) selections.append( f.id() ) break #only one or less Schnittpunkt sind möglich print len(selections) printlayer[0].selectedFeatureCount() #Es wurde ausgewählt printlayers[1].featureCount()

und es lief wie ich erwartet hatte.

Die Ergebnisse in der Python-Konsole waren:

gebaeude ausschluss Polygon ((355710.56858536007348448 4472539.63295774068683386, 355785.63899155310355127 4472539.63295774254947901, 355785.0478859927970916 4472464.56255155056715012, 355711.7507964815013106) 133856575012, 355711.7507964815013106,11473585369672360.85774069,636.585

Polygon in WKT-Notation war baude (bestätigt mit QuickWKT Plugin). Ich hoffe, dass es hilft.