Mere

Hvorfor får jeg forskellige resultater fra PyQGIS feature.geometry (). Type ()?

Hvorfor får jeg forskellige resultater fra PyQGIS feature.geometry (). Type ()?


På python-konsollen i QGIS, hvad er forskellen mellem følgende to kodestykker (activeLayer er et polygonlag):

# 1) iface.activeLayer (). ValgtFeatures () [0] .geometry (). Type () >>> 3 # 2) f = iface.activeLayer (). ValgtFeatures () [0] f.geometry (). type () >>> 2

I tilfælde 1) er resultatet '3', i tilfælde 2) er resultatet '2', og desuden i QGIS 2.12 bruger 'asPolygon ()' i stedet for 'type ()' tilfælde 2) som en liste over qPoints som forventet mens i tilfælde 1) siger QGIS farvel med en 'Runtime Error! ... R6025 - rent virtuelt funktionsopkald' (i QGIS 2.8 resulterer i en tom liste).

Jeg forventede de samme resultater.


Efter min forståelse er det fordi selvom det ser ud til at være ren Python, er PyQGIS API bakket op med C ++. Python er en indpakning på toppen.

Af denne grund i tilfælde 1,iface.activeLayer (). valgtFeatures () [0] .geometry ()var allerede ødelagt (C ++ understøttet og allerede renset for at undgå hukommelsesforbrug), og du får enUkendt geometrieller et nedbrud.

I tilfælde 2 tildeles en variabelf, funktionen undgår rengøring, og du får det forventede resultat.

Underligt, men det er, hvordan det fungerer.


Første udtryk er ikke acceptabelt, fordi 3 er den konstante kode for en 'UnknownGeometry'. På Python Console kan du bekræfte det:

>>> QGis.Ukendt geometri 3

Komplet liste over de opregnede typer kan ses her. Når du bruger metoden 'asPolygon' geometri, resulterer det i dette tilfælde i en tom liste.

Anden klippet kode producerer nummer 2 geometri type, det vil sige det tildelte heltal for en polygon geometri. I dette tilfælde fungerer det som forventet, når det bruges 'asPolygon'-geometri-metoden.