Veel

Kuidas vältida QGISi krahhi, kui see on sümbolile lisatud sümbolikihile?

Kuidas vältida QGISi krahhi, kui see on sümbolile lisatud sümbolikihile?


Kui käivitan järgmise koodi QGIS -i Pythoni konsoolis joonevektorikihiga:

symbol1 = QgsLineSymbolV2.createSimple ({'penstyle': 'solid', 'color': 'black', 'width': '3'}) symbol2 = QgsLineSymbolV2.createSimple ({'penstyle': 'dash', 'color' : 'valge', 'laius': '0', 'customdash': '8; 4', 'use_custom_dash': '1'}) route = iface.activeLayer () renderer = route.rendererV2 () type1 = symbol1. type () type2 = symbol2.type () print "Kas sümbolikiht ühildub?", symbol1.isSymbolLayerCompatible (type2) #Create Symbol Layers symbol_layer1 = symbol1.symbolLayer (0) symbol_layer2 = symbol2.symbolLayer (0) #Append Symbol Layer 2 to symbol1 (nüüd kahe sümbolikihiga) symbol1.appendSymbolLayer (symbol_layer2) renderer.setSymbol (symbol1) route.triggerRepaint () iface.legendInterface (). refreshLayerSymbology (route)

Sain järgmise tulemuse:

mis näitab, et sümbol2 (QgsLineSymbolV2 klass), nagu sümbolikiht (sümbol_kiht2 kuulub QgsLineSymbolLayerV2 klass), oli see õigesti lisatud sümbolile 1. Kui aga seda koodi uuesti käivitada, jookseb QGIS kokku ja see sulgeb kõik aknad. Seda käitumist ei kuvata, kui sümbolil on ainult üks sümbolikiht; kui seda kommenteeritakse esmakordsel täitmisel, selle käsuga rida:

symbol1.appendSymbolLayer (symbol_layer2)).

Kuidas vältida QGIS -i teistkordset krahhi, kui kasutan kahe või enama sümbolikihiga sümbolit?


Põhjus

Sümboli loomisel omab see selle kihtide omandit. Kui lisate kihi olemasolevale sümbolile, võtab see lisatud kihi omandiõiguse. Omandiline kuuluvus tähendab seda, et selle saab igal ajal vabalt kustutada.

Teie näites võtavad mõlemad sümbolid omandiõiguse sümbol_kiht2 (sümbol2, kuna see lõi sümbolikiht2, sümbol1, kuna sellele lisati sümbolkiht2).

Nüüd, kui koodi teist korda käivitate, asendatakse sümbol2 uuega, nii et python kustutab sümboli2 ja sümbol2 kustutab sümboli_kihi2, kuna sellel on omandiõigus.

Kui määrate renderile hiljem uue sümboli, kustutab see vana sümboli (mille määrasite koodi esmakordsel käivitamisel), kuna seda enam ei kasutata. (Vana) sümbol1 kustutatakse ja koos sellega sümbol_kiht2, mille sümbol1 võtab ka omandiõiguse. Aga - halb õnn - see on juba sümbol2 abil kustutatud. Ja sama asja kaks korda kustutamine põhjustab krahhi ...

Lahendus

Kloonige sümbolikiht, nii et mõlemal on töötamiseks oma koopia

symbol1.appendSymbolLayer (symbol_layer2.clone ())

Või eemaldage sümbolikiht sümbolist2

symbol_layer2 = symbol2.takeSymbolLayer (0)

Või looge sümbolikiht otse, selle asemel, et laenata sümboli abil loodud kiht.

Kas see on viga?

Ei, see on ootuspärane käitumine.

Pythoni koodiga krahhide tekitamiseks on mitu võimalust. API dokumentides on aga arenguruumi. Seda muudetakse peagi.


Vaata videot: QGIS: Add Vector Layer Chapter 5