Hi. Thank you for the videos. I really appreciate it that they are focused on geospatial analysis. I also like the way you 'make mistakes'. It teaches me even more. Keep the good work going. Thank you!
Thank you for this video. I used the method to create a map for which i needed to include a set of almost 200 expression. I'm still quite new to PyQGIS. Is there a way to create a list of all the defined expressions and afterwards loop over them? I don't want to copy-paste this code 200 times: with edit(layer): for f in layer.getFeatures(): context.setFeature(f) f['NewVariable'] = expression1.evaluate(context) layer.updateFeature(f) I appreciate any hint or answer! Thank you in advance!
Yes. You will need to create a list that has all your expressions as strings, and a list that has the names of the new fields to create. Then you can create another loop after context.setFeature that loops through the expression strings, creates a QgsExpression then evaluates the expression. So you'll have to move around the order of the code from the video a little bit, but you should be able to do it.
Hi Dries. I'll put it on my list but I'm not sure when I'll be able to get to it. Condition statements in PyQGIS are going to work the same way as conditionals in regular Python. So if you need to figure something out quickly check out regular Python tutorials.
@@geospatialschool well this script works on python console data='/home/geoportal/qgis/lizmapwps/lizmap/instances/VulnerabilityTool/data1/default_vulnerability.shp' #layer= QgsVectorLayer(data, 'dd', 'ogr') layer= iface.addVectorLayer(data, 'dd', 'ogr') pv=layer.dataProvider() pv.addAttributes([QgsField('rawvul', QVariant.Double),\ QgsField('customvul', QVariant.Double)]) layer.updateFields() expression1=QgsExpression('"LoACapacit" * 0.33 + "sensitivit" * 0.44 + "exposure" * 0.27' ) expression2=QgsExpression('expression1-minimum(expression1)/(maximum(expression1)-minimum(expression1))') context = QgsExpressionContext() context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer)) with edit(layer): for f in layer.getFeatures(): context.setFeature(f) f['rawvul'] = expression1.evaluate(context) f['customvul'] = expression2.evaluate(context) layer.updateFeature(f) with edit(layer): for f in layer.getFeatures(): context.setFeature(f) f['customvul'] = expression2.evaluate(context) layer.updateFeature(f) # however i would like to change it to qgsProcessing script .. am stuck at this... pleasse help please....
Hi, Is there a group by and summarize possibility on vector attribute table using pyqgis?
Hi. Thank you for the videos. I really appreciate it that they are focused on geospatial analysis. I also like the way you 'make mistakes'. It teaches me even more. Keep the good work going. Thank you!
Glad you like them!
Just what I needed, thank you![2]
You're welcome!
Hi Mr. Konrad,
Please help me,
How can i concatenate two field by field calculator
How to kml convert shapefile. Kml have table tag.
Just what I needed, thank you!
Happy to help!
Thank you for this video. I used the method to create a map for which i needed to include a set of almost 200 expression. I'm still quite new to PyQGIS. Is there a way to create a list of all the defined expressions and afterwards loop over them? I don't want to copy-paste this code 200 times:
with edit(layer):
for f in layer.getFeatures():
context.setFeature(f)
f['NewVariable'] = expression1.evaluate(context)
layer.updateFeature(f)
I appreciate any hint or answer!
Thank you in advance!
Yes. You will need to create a list that has all your expressions as strings, and a list that has the names of the new fields to create. Then you can create another loop after context.setFeature that loops through the expression strings, creates a QgsExpression then evaluates the expression. So you'll have to move around the order of the code from the video a little bit, but you should be able to do it.
Thanks a lot Konrad!
Can you please make a video on conditional statements (if, elif, else) in the pyQGIS console?
Hi Dries. I'll put it on my list but I'm not sure when I'll be able to get to it. Condition statements in PyQGIS are going to work the same way as conditionals in regular Python. So if you need to figure something out quickly check out regular Python tutorials.
@@geospatialschool Thanks for the answer! :)
Hi Mr. Konrad,
How if we want to calculate using the existed field/column of the layer?
You can use the same procedure. You just won't need to create any new fields.
genial....!
thanks
You're welcome!
Hi how do i run this in qgis3 processing script??
Just as shown in the video. Once you have a vector layer variable you can access, create, and calculate attributes the same way.
@@geospatialschool
well this script works on python console
data='/home/geoportal/qgis/lizmapwps/lizmap/instances/VulnerabilityTool/data1/default_vulnerability.shp'
#layer= QgsVectorLayer(data, 'dd', 'ogr')
layer= iface.addVectorLayer(data, 'dd', 'ogr')
pv=layer.dataProvider()
pv.addAttributes([QgsField('rawvul', QVariant.Double),\
QgsField('customvul', QVariant.Double)])
layer.updateFields()
expression1=QgsExpression('"LoACapacit" * 0.33 + "sensitivit" * 0.44 + "exposure" * 0.27' )
expression2=QgsExpression('expression1-minimum(expression1)/(maximum(expression1)-minimum(expression1))')
context = QgsExpressionContext()
context.appendScopes(QgsExpressionContextUtils.globalProjectLayerScopes(layer))
with edit(layer):
for f in layer.getFeatures():
context.setFeature(f)
f['rawvul'] = expression1.evaluate(context)
f['customvul'] = expression2.evaluate(context)
layer.updateFeature(f)
with edit(layer):
for f in layer.getFeatures():
context.setFeature(f)
f['customvul'] = expression2.evaluate(context)
layer.updateFeature(f)
# however i would like to change it to qgsProcessing script .. am stuck at this... pleasse help please....