<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>What do you mean by "new raster"? What is supposed to be in it
      and how should its extents, CRS etc be defined?</p></div></blockquote><div>Well, I might want to create the extents + crs based on a different raster, but I also might want to create it based on some user input.</div><div>For example if I write a module that starts from a vector layer and generates a raster layer processing it.</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>Do you have existing data that you want to use to create it? Or
      why is a constant value raster not what you want?</p></div></blockquote><div>I agree that 99% of the times I will start from an existing raster layer from which I take extent, resolution and crs.<br></div><div>And I am ok with using the processing toolbox to create a new raster initialized with novalues.</div><div><br></div><div>The problem I posed in the first place (with the code snippet) is that if I modify the raster using a QgsRasterBlock, the result is not correct.</div><div>In the snippet I am taking values from one raster and copy it into the new raster in certain conditions. But the result is not the expected one.</div><div>So my first question was if I am doing something wrong. Because I expect a portion following isolines to be set to novalue, but instead I get just a noisy raster layer.</div><div><br></div><div>Thanks,</div><div>Andrea</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <p>If you want to base it on an existing raster, best use a raster
      calculator to create a plain copy.<br>
    </p>
    <p>Cheers, Hannes<br>
    </p>
    <div>Am 09.05.23 um 08:28 schrieb andrea
      antonello via QGIS-User:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">Hello,<br>
        <div>I am trying to find out the best workflow to create a new
          raster.</div>
        <div>As an example I take an existing elevation model raster and
          loop over it to set values between 1500 and 2000 to novalue
          and write the result to a new raster.</div>
        <div><br>
        </div>
        <div>This is the only way I found to do so:</div>
        <div><br>
        </div>
        <div>
          <div style="color:rgb(0,0,0);font-family:"Droid Sans Mono","monospace",monospace;font-size:14px;line-height:19px;white-space:pre-wrap"><div><span style="color:rgb(0,128,0)"># create new raster with novalues between 1500 and 2000</span></div><div><span style="color:rgb(0,16,128)">dataType</span> = <span style="color:rgb(0,16,128)">dtmLayer</span>.<span style="color:rgb(121,94,38)">dataProvider</span>().<span style="color:rgb(121,94,38)">dataType</span>(<span style="color:rgb(9,134,88)">1</span>)</div><div><span style="color:rgb(0,16,128)">crs</span> = <span style="color:rgb(38,127,153)">QgsCoordinateReferenceSystem</span>(<span style="color:rgb(163,21,21)">'EPSG:3003'</span>)</div><div><span style="color:rgb(0,16,128)">params</span> = {</div><div>    <span style="color:rgb(163,21,21)">'EXTENT'</span>: <span style="color:rgb(0,16,128)">dtmLayer</span>.<span style="color:rgb(121,94,38)">extent</span>(),</div><div>    <span style="color:rgb(163,21,21)">'TARGET_CRS'</span>: <span style="color:rgb(0,16,128)">crs</span>,</div><div>    <span style="color:rgb(163,21,21)">'PIXEL_SIZE'</span>: <span style="color:rgb(0,16,128)">dtmLayer</span>.<span style="color:rgb(121,94,38)">rasterUnitsPerPixelX</span>(),</div><div>    <span style="color:rgb(163,21,21)">'NUMBER'</span>: -<span style="color:rgb(9,134,88)">9999.0</span>,</div><div>    <span style="color:rgb(0,128,0)"># 'OUTPUT_TYPE': dataType,</span></div><div>    <span style="color:rgb(163,21,21)">'OUTPUT'</span>: <span style="color:rgb(38,127,153)">QgsProcessing</span>.<span style="color:rgb(0,16,128)">TEMPORARY_OUTPUT</span></div><div>}</div><div><span style="color:rgb(0,16,128)">newRaster</span> = <span style="color:rgb(38,127,153)">processing</span>.run(<span style="color:rgb(163,21,21)">'qgis:createconstantrasterlayer'</span>, <span style="color:rgb(0,16,128)">params</span>)[<span style="color:rgb(163,21,21)">'OUTPUT'</span>]</div><div><span style="color:rgb(0,16,128)">newRasterLayer</span> = <span style="color:rgb(38,127,153)">QgsRasterLayer</span>(<span style="color:rgb(0,16,128)">newRaster</span>, <span style="color:rgb(163,21,21)">'temp'</span>, <span style="color:rgb(163,21,21)">'gdal'</span>)</div><div><span style="color:rgb(0,16,128)">newRasterProvider</span> = <span style="color:rgb(0,16,128)">newRasterLayer</span>.<span style="color:rgb(121,94,38)">dataProvider</span>()</div>
<div><span style="color:rgb(0,16,128)">block</span> = <span style="color:rgb(38,127,153)">QgsRasterBlock</span>(<span style="color:rgb(0,16,128)">dataType</span>, <span style="color:rgb(0,16,128)">cols</span>, <span style="color:rgb(0,16,128)">rows</span>)</div><div>
</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> = <span style="color:rgb(0,16,128)">dtmLayer</span>.<span style="color:rgb(121,94,38)">dataProvider</span>().<span style="color:rgb(121,94,38)">transformCoordinates</span>(<span style="color:rgb(38,127,153)">QgsPoint</span>(<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> = <span style="color:rgb(0,16,128)">dtmLayer</span>.<span style="color:rgb(121,94,38)">dataProvider</span>().<span style="color:rgb(121,94,38)">sample</span>(<span style="color:rgb(38,127,153)">QgsPointXY</span>(<span style="color:rgb(0,16,128)">point</span>.<span style="color:rgb(121,94,38)">x</span>(), <span style="color:rgb(0,16,128)">point</span>.<span style="color:rgb(121,94,38)">y</span>()), <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(175,0,219)">if</span> <span style="color:rgb(0,16,128)">value</span> < <span style="color:rgb(9,134,88)">1000</span> <span style="color:rgb(0,0,255)">or</span> <span style="color:rgb(0,16,128)">value</span> > <span style="color:rgb(9,134,88)">2000</span>:</div><div>                <span style="color:rgb(0,16,128)">block</span>.<span style="color:rgb(121,94,38)">setValue</span>(<span style="color:rgb(0,16,128)">row</span>, <span style="color:rgb(0,16,128)">col</span>, <span style="color:rgb(0,16,128)">value</span>)</div><div>
</div><div><span style="color:rgb(0,16,128)">newRasterProvider</span>.<span style="color:rgb(121,94,38)">setEditable</span>(<span style="color:rgb(0,0,255)">True</span>)</div><div><span style="color:rgb(0,16,128)">newRasterProvider</span>.<span style="color:rgb(121,94,38)">writeBlock</span>(<span style="color:rgb(0,16,128)">block</span>, <span style="color:rgb(0,16,128)">band</span>=<span style="color:rgb(9,134,88)">1</span>)</div><div><span style="color:rgb(0,16,128)">newRasterProvider</span>.<span style="color:rgb(121,94,38)">setEditable</span>(<span style="color:rgb(0,0,255)">False</span>)</div></div>
        </div>
        <div><br>
        </div>
        <div><br>
        </div>
        <div>This code has two main issues:</div>
        <div>1. if I uncomment the line containing OUTPUT_TYPE, I am
          getting an error about the type passed. But I can't find the
          right type needed there, it should be the one taken from the
          original provider.</div>
        <div>2. the resulting raster is scrambled as if there was a
          shift in the setting of the values. But the
          QgsRasterBlock seems to be built correctly (rows, cols) and
          the values set properly (col, row).<br>
          3. in the above example, the dtmLayer has an epsg 3033 crs and
          when loaded manually into QGIS, it is recognized. But when I
          read the layer's metadata crs with pyQGIS , it is not able to
          read it and tells me it is invalid. </div>
        <div><br>
        </div>
        <div>Has anyone a hint about what I am doing wrong? </div>
        <div><br>
        </div>
        <div>Thanks,</div>
        <div>Andrea</div>
        <div><br>
        </div>
        <div><br>
        </div>
      </div>
      <br>
      <fieldset></fieldset>
      <pre>_______________________________________________
QGIS-User mailing list
<a href="mailto:QGIS-User@lists.osgeo.org" target="_blank">QGIS-User@lists.osgeo.org</a>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a>
</pre>
    </blockquote>
    <pre cols="72">-- 
Johannes Kröger / GIS-Entwickler/-Berater

---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei der <a href="http://www.foss-academy.com" target="_blank">www.foss-academy.com</a>
---------------------------------------------

WhereGroup GmbH
c/o KK03 GmbH
Lange Reihe 29
20099 Hamburg
Germany

Tel: +49 (0)228 / 90 90 38 - 36
Fax: +49 (0)228 / 90 90 38 - 11

<a href="mailto:johannes.kroeger@wheregroup.com" target="_blank">johannes.kroeger@wheregroup.com</a>
<a href="http://www.wheregroup.com" target="_blank">www.wheregroup.com</a>
Geschäftsführer:
Olaf Knopp, Peter Stamm 
Amtsgericht Bonn, HRB 9885
-------------------------------
</pre>
  </div>

_______________________________________________<br>
QGIS-User mailing list<br>
<a href="mailto:QGIS-User@lists.osgeo.org" target="_blank">QGIS-User@lists.osgeo.org</a><br>
List info: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
Unsubscribe: <a href="https://lists.osgeo.org/mailman/listinfo/qgis-user" rel="noreferrer" target="_blank">https://lists.osgeo.org/mailman/listinfo/qgis-user</a><br>
</blockquote></div></div>