Daugiau

Atnaujinamas QGIS papildinio funkcijos atributas?

Atnaujinamas QGIS papildinio funkcijos atributas?


Rašau papildinį, skirtą QGIS (v2.12).

Šiame forume buvo nemažai panašių klausimų, tačiau jie, atrodo, man netinka. Mano papildinys atlieka šiuos veiksmus:

  • gauti vektorinį sluoksnį
  • patikrinkite, ar tai yra eilutės formos failas.
  • gauti rastro sluoksnį
  • pažvelkite į vektorinį sluoksnį, jei nėra atributo, pavadinto „nuolydis“, pridėkite jį.
  • pereikite kiekvieną formos sluoksnio eilutę ir apskaičiuokite nuolydį.
  • pakeisti tos eilutės atributo vertę į apskaičiuotą nuolydį.

Mano problema yra paskutinis žingsnis, aš galiu apskaičiuoti nuolydį, nustatyti to lauko atributo vertę, tačiau ji niekada nebus rodoma atributų lentelėje, kai įskiepis bus baigtas.

Čia yra atitinkamas kodas, visi žurnalo pranešimai galioja, # komentarai yra tai, ką aš išbandžiau. Man labiausiai patinka setAttribute.

selectedVectorLayer.startEditing () eilutei pasirinktameVectorLayer.getFeatures (): slope = self.getLineSlope (line, rasterData) columnid = selectedVectorLayer.fieldNameIndex ('slope') QgsMessageLog.logMessage ("id: {} segmentas: {} Šlaitas: { } ". formatas (line.attribute ('id'), line.attribute ('segment'), nuolydis), 'LineSlopes', QgsMessageLog.INFO) # line.changeAttributeValues ​​(line.id (), columnid, slope) # attrib = {0: line.id (), 1: line.attribute ('segment'), 2: nuolydis} # selectedVectorLayer.dataProvider (). changeAttributeValues ​​({line.id (): attrib}) line.setAttribute (' slope ', slope) QgsMessageLog.logMessage ("id: {} segmentas: {} Slope: {}". formatas (line.attribute (' id '), line.attribute (' segment '), line.attribute (' slope ')),' LineSlopes ', QgsMessageLog.INFO) selectedVectorLayer.commitChanges ()

Aš galvoju, kad turi būti kažkas paprasto, ko nepastebėjau.


Tu teisus. Atrodo, kad jūsų išbandyti būdai veikia netinkamai. Bet yra būdas, kurio nepaminėjote savo pirminiame klausime. NaudokitechangeAttributeValueiš sluoksnio objekto tokiu būdu:

columnid = selectedVectorLayer.fieldNameIndex ('slope') # 'slope' laukas jau turi būti selectedVectorLayer.startEditing () eilutei selectedVectorLayer.getFeatures (): slope = self.getLineSlope (line, rasterData) selectedVectorLayer.changeAttributeValue (line.id ( ), columnid, nuolydis) selectedVectorLayer.commitChanges ()

Tai buvo vienintelis būdas atnaujinti atributą.


Žiūrėti video įrašą: QGIS - Create New Shapefile