<div dir="ltr">I apologize for my previous badly readable code snippet.<div>Here a better version with a dummy example:</div><div><br><div><div style="color:rgb(0,0,0);font-family:"Droid Sans Mono","monospace",monospace;font-size:14px;line-height:19px;white-space:pre"><div><span style="color:rgb(0,128,0)"># simple raster stats</span></div><div><span style="color:rgb(0,16,128)">cols</span> = dtmLayer.width()<span style="color:rgb(205,49,49)">;</span></div><div><span style="color:rgb(0,16,128)">rows</span> = dtmLayer.height()<span style="color:rgb(205,49,49)">;</span></div><br><div><span style="color:rgb(0,16,128)">minV</span> = <span style="color:rgb(9,134,88)">10000000</span></div><div><span style="color:rgb(0,16,128)">maxV</span> = <span style="color:rgb(9,134,88)">0</span></div><div><span style="color:rgb(0,16,128)">count</span> = <span style="color:rgb(9,134,88)">0</span></div><div><span style="color:rgb(0,16,128)">sum</span> = <span style="color:rgb(9,134,88)">0</span></div><div><span style="color:rgb(0,16,128)">transformType</span> = QgsRasterDataProvider.TransformType.TransformImageToLayer</div><div><span style="color:rgb(175,0,219)">for</span> <span style="color:rgb(0,16,128)">row</span> <span style="color:rgb(0,0,255)">in</span> <span style="color:rgb(38,127,153)">range</span>(<span style="color:rgb(0,16,128)">rows</span>):</div><div>    <span style="color:rgb(175,0,219)">for</span> <span style="color:rgb(0,16,128)">col</span> <span style="color:rgb(0,0,255)">in</span> <span style="color:rgb(38,127,153)">range</span>(<span style="color:rgb(0,16,128)">cols</span>):</div><div>        <span style="color:rgb(0,16,128)">point</span> = dtmLayer.dataProvider().transformCoordinates(QgsPoint(<span style="color:rgb(0,16,128)">col</span>, <span style="color:rgb(0,16,128)">row</span>), <span style="color:rgb(0,16,128)">transformType</span>)</div><div>        <span style="color:rgb(0,16,128)">value</span>, <span style="color:rgb(0,16,128)">res</span> = dtmLayer.dataProvider().sample(QgsPointXY(<span style="color:rgb(0,16,128)">point</span>.x(), <span style="color:rgb(0,16,128)">point</span>.y()), <span style="color:rgb(9,134,88)">1</span>)</div><div>        </div><div>        <span style="color:rgb(175,0,219)">if</span> <span style="color:rgb(0,16,128)">res</span> <span style="color:rgb(0,0,255)">and</span> <span style="color:rgb(0,16,128)">value</span> != -<span style="color:rgb(9,134,88)">9999.0</span>:</div><div>            <span style="color:rgb(0,16,128)">minV</span> = <span style="color:rgb(121,94,38)">min</span>(<span style="color:rgb(0,16,128)">value</span>, <span style="color:rgb(0,16,128)">minV</span>)</div><div>            <span style="color:rgb(0,16,128)">maxV</span> = <span style="color:rgb(121,94,38)">max</span>(<span style="color:rgb(0,16,128)">value</span>, <span style="color:rgb(0,16,128)">maxV</span>)</div><div>            <span style="color:rgb(0,16,128)">count</span> += <span style="color:rgb(9,134,88)">1</span></div><div>            <span style="color:rgb(0,16,128)">sum</span> += <span style="color:rgb(0,16,128)">value</span></div><div>        </div><div><span style="color:rgb(0,16,128)">avg</span> = <span style="color:rgb(0,16,128)">sum</span>/<span style="color:rgb(0,16,128)">count</span><span style="color:rgb(205,49,49)">;</span></div><div><br></div></div></div><div><br></div><div>This now works, but looks like it might be very slow for larger rasters..</div><div><br></div><div>Thanks,</div><div>Andrea</div><div><br><br>On Fri, May 5, 2023 at 4:48 PM andrea antonello <<a href="mailto:andrea.antonello@gmail.com" target="_blank">andrea.antonello@gmail.com</a>> wrote:<br>><br>> Hello,<br>> I am trying to understand how to easily loop through the values of a<br>> raster layer using pyqgis.<br>><br>> In the docs I see the sample and identify methods of the dataprovider,<br>> but can't spot anything that uses rows/cols as a way of iteration.<br>> Is the most efficient way to use transformCoordinates to get the world<br>> coordinates and then use the sample function?<br>><br>> Something like this:<br>><br>> cols = dtmLayer.width();<br>> rows = dtmLayer.height();<br>> transformType = QgsRasterDataProvider.TransformType.TransformImageToLayer<br>> for row in range(rows):<br>>     for col in range(cols):<br>>         point =<br>> dtmLayer.dataProvider().transformCoordinates(QgsPoint(col, row),<br>> transformType)<br>>         value, res =<br>> dtmLayer.dataProvider().sample(QgsPointXY(point.x(), point.y()), 1)<br>><br>> The above for some reason doesn't work yet though.<br>><br>> Thanks,<br>> Andrea</div></div></div>