<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">What kind of error do you get if you uncomment your datatype line? What <br>
value does that datatype have? Does it work if you pass the number 6 as <br>
datatype?<br></blockquote><div><br></div><div>Yes, it does and sets the right type Float64. But I am not sure how to do that if I want the same datatype of the original raster layer.</div><div><br></div><div>Interestingly enough:</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"><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(121,94,38)">print</span>(<span style="color:rgb(38,127,153)">int</span>(<span style="color:rgb(0,16,128)">dataType</span>))</div></div></div><div><br></div><div>prints 7, which then results in an error:</div><div><br></div><div>File "/usr/share/qgis/python/plugins/processing/core/Processing.py", line 173, in runAlgorithm<br>    raise QgsProcessingException(msg)<br>_core.QgsProcessingException: Unable to execute algorithm<br>Incorrect parameter value for OUTPUT_TYPE<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">
<br>
What does the QGIS GUI say about the original and the created layers <br>
datatypes in their properties dialogs?<br></blockquote><div><br></div><div>Once the 6 is used, then for both properly Float64.</div><div><br></div><div>I have some findings on the reaster writing, but that will make more sense in a different dedicated thread.</div><div><br></div><div>Cheers,</div><div>Andrea</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Am 2023-05-09 16:23, schrieb andrea antonello via QGIS-User:<br>
>> What do you mean by "new raster"? What is supposed to be in it and<br>
>> how should its extents, CRS etc be defined?<br>
> <br>
> Well, I might want to create the extents + crs based on a different<br>
> raster, but I also might want to create it based on some user input.<br>
> For example if I write a module that starts from a vector layer and<br>
> generates a raster layer processing it.<br>
> <br>
>> Do you have existing data that you want to use to create it? Or why<br>
>> is a constant value raster not what you want?<br>
> <br>
> I agree that 99% of the times I will start from an existing raster<br>
> layer from which I take extent, resolution and crs.<br>
> <br>
> And I am ok with using the processing toolbox to create a new raster<br>
> initialized with novalues.<br>
> <br>
> The problem I posed in the first place (with the code snippet) is that<br>
> if I modify the raster using a QgsRasterBlock, the result is not<br>
> correct.<br>
> In the snippet I am taking values from one raster and copy it into the<br>
> new raster in certain conditions. But the result is not the expected<br>
> one.<br>
> So my first question was if I am doing something wrong. Because I<br>
> expect a portion following isolines to be set to novalue, but instead<br>
> I get just a noisy raster layer.<br>
> <br>
> Thanks,<br>
> Andrea<br>
> <br>
>> If you want to base it on an existing raster, best use a raster<br>
>> calculator to create a plain copy.<br>
>> <br>
>> Cheers, Hannes<br>
>> Am 09.05.23 um 08:28 schrieb andrea antonello via QGIS-User:<br>
>> <br>
>>> Hello,<br>
>>> I am trying to find out the best workflow to create a new raster.<br>
>>> As an example I take an existing elevation model raster and loop<br>
>>> over it to set values between 1500 and 2000 to novalue and write<br>
>>> the result to a new raster.<br>
>>> <br>
>>> This is the only way I found to do so:<br>
>>> <br>
>>> # create new raster with novalues between 1500 and 2000<br>
>>> dataType = dtmLayer.dataProvider().dataType(1)<br>
>>> crs = QgsCoordinateReferenceSystem('EPSG:3003')<br>
>>> params = {<br>
>>> 'EXTENT': dtmLayer.extent(),<br>
>>> 'TARGET_CRS': crs,<br>
>>> 'PIXEL_SIZE': dtmLayer.rasterUnitsPerPixelX(),<br>
>>> 'NUMBER': -9999.0,<br>
>>> # 'OUTPUT_TYPE': dataType,<br>
>>> 'OUTPUT': QgsProcessing.TEMPORARY_OUTPUT<br>
>>> }<br>
>>> newRaster = processing.run('qgis:createconstantrasterlayer',<br>
>>> params)['OUTPUT']<br>
>>> newRasterLayer = QgsRasterLayer(newRaster, 'temp', 'gdal')<br>
>>> newRasterProvider = newRasterLayer.dataProvider()<br>
>>> block = QgsRasterBlock(dataType, cols, rows)<br>
>>> <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 = dtmLayer.dataProvider().sample(QgsPointXY(point.x(),<br>
>>> point.y()), 1)<br>
>>> <br>
>>> if res and value != -9999.0:<br>
>>> if value < 1000 or value > 2000:<br>
>>> block.setValue(row, col, value)<br>
>>> <br>
>>> newRasterProvider.setEditable(True)<br>
>>> newRasterProvider.writeBlock(block, band=1)<br>
>>> newRasterProvider.setEditable(False)<br>
>>> <br>
>>> This code has two main issues:<br>
>>> 1. if I uncomment the line containing OUTPUT_TYPE, I am getting an<br>
>>> error about the type passed. But I can't find the right type<br>
>>> needed there, it should be the one taken from the original<br>
>>> provider.<br>
>>> 2. the resulting raster is scrambled as if there was a shift in<br>
>>> the setting of the values. But the QgsRasterBlock seems to be<br>
>>> built correctly (rows, cols) and the values set properly (col,<br>
>>> row).<br>
>>> 3. in the above example, the dtmLayer has an epsg 3033 crs and<br>
>>> when loaded manually into QGIS, it is recognized. But when I read<br>
>>> the layer's metadata crs with pyQGIS , it is not able to read it<br>
>>> and tells me it is invalid.<br>
>>> <br>
>>> Has anyone a hint about what I am doing wrong?<br>
>>> <br>
>>> Thanks,<br>
>>> Andrea<br>
>>> <br>
>>> _______________________________________________<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>
>> <br>
>> --<br>
>> Johannes Kröger / GIS-Entwickler/-Berater<br>
>> <br>
>> ---------------------------------------------<br>
>> Aufwind durch Wissen!<br>
>> Web-Seminare und Online-Schulungen<br>
>> bei der <a href="http://www.foss-academy.com" rel="noreferrer" target="_blank">www.foss-academy.com</a> [1]<br>
>> ---------------------------------------------<br>
>> <br>
>> WhereGroup GmbH<br>
>> c/o KK03 GmbH<br>
>> Lange Reihe 29<br>
>> 20099 Hamburg<br>
>> Germany<br>
>> <br>
>> Tel: +49 (0)228 / 90 90 38 - 36<br>
>> Fax: +49 (0)228 / 90 90 38 - 11<br>
>> <br>
>> <a href="mailto:johannes.kroeger@wheregroup.com" target="_blank">johannes.kroeger@wheregroup.com</a><br>
>> <a href="http://www.wheregroup.com" rel="noreferrer" target="_blank">www.wheregroup.com</a> [2]<br>
>> Geschäftsführer:<br>
>> Olaf Knopp, Peter Stamm<br>
>> Amtsgericht Bonn, HRB 9885<br>
>> -------------------------------<br>
>> <br>
>> _______________________________________________<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>
> <br>
> <br>
> Links:<br>
> ------<br>
> [1] <a href="http://www.foss-academy.com" rel="noreferrer" target="_blank">http://www.foss-academy.com</a><br>
> [2] <a href="http://www.wheregroup.com" rel="noreferrer" target="_blank">http://www.wheregroup.com</a><br>
> _______________________________________________<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>