<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Sorry Arturo,</p>
<p>I totally missed that Martin had already recommended it and that
you said you didn't know about it. I didn't mean to come across
pushy or anything :))</p>
<p>Andreas' links are great to see how to create them. Here is a
nice post that explains the concept:
<a class="moz-txt-link-freetext" href="https://developers.planet.com/docs/planetschool/an-introduction-to-cloud-optimized-geotiffs-cogs-part-1-overview/">https://developers.planet.com/docs/planetschool/an-introduction-to-cloud-optimized-geotiffs-cogs-part-1-overview/</a></p>
<p>As you can see there you probably also want to created "tiled"
TIFFs, where the data internal to the TIFF is arranged in a way
that fits spatial queries better.</p>
<p>If you can, simply specify that you want "cloud-optimized
geotiffs", those have all these optimisations and are also
"typical spatial analysis optimized geotiffs".<br>
</p>
<p>Cheers, Hannes<br>
</p>
<div class="moz-cite-prefix">Am 30.05.23 um 14:37 schrieb afernandez
via QGIS-Developer:<br>
</div>
<blockquote type="cite"
cite="mid:94f0f2109f8d9.1cf2e804640c7@odyhpc.com">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<div>
<meta charset="utf-8">
<div id="compose-body-wrapper" dir="auto">
<div dir="auto">
<div dir="auto">Hello Hannes,</div>
<div dir="auto">Sorry to say that I'm at a loss here. I had
not previously heard of 'overviews' and am having a hard
time finding much information. I couldn't find anything in
the PyQGIS (v3.28) developer cookbook, which is my main
reference in this QGIS journey. The found information is
at
<a class="moz-txt-link-freetext" href="https://docs.qgis.org/3.28/en/docs/user_manual/processing_algs/gdal/rastermiscellaneous.html">https://docs.qgis.org/3.28/en/docs/user_manual/processing_algs/gdal/rastermiscellaneous.html</a>
but didn't exactly clarify how to implement overviews with
a script or why this would sidestep reading the file
several times. I don't quite understand this last point
either, as the file is large but the size of the band
(after everything is prepped and before rendering) is
relatively small, and should fit amply into the available
memory.</div>
<div dir="auto">Thanks,</div>
<div dir="auto">Arturo</div>
<div><br>
</div>
</div>
<div dir="auto"><br>
</div>
</div>
<div class="replyHeader" dir="auto">Johannes Kröger (WhereGroup)
via QGIS-Developer wrote:</div>
<br>
<br>
<div>
<blockquote
cite="mid:3ea1f315-669a-6d32-e5c6-7bbbc74e153f@wheregroup.com"
type="cite" style="margin:0 0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<p>Hi Arturo,</p>
<p>make sure you create overviews on your big rasters or
QGIS will re-read the whole file all the time to render an
appropriate representation in the map.</p>
<p>Cheers, Hannes<br>
</p>
<div class="moz-cite-prefix">Am 30.05.23 um 04:35 schrieb
afernandez via QGIS-Developer:<br>
</div>
<blockquote type="cite"
cite="mid:e4867467c3728.ad83e8afff7c4@odyhpc.com">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<div>
<meta charset="utf-8">
<div id="compose-body-wrapper" dir="auto">
<div dir="auto">
<div dir="auto">Hello Martin,</div>
<div dir="auto">I'm trying to understand what you're
saying but my background is in numerical methods
where tasks are split into threads for
acceleration purposes. If a single layer is
rendered by a single core (as you write and I was
observing), how would a 1,000 x 1,000 (or a 5,000
x 5,000) layer be handled? Wouldn't it take too
long? (However, you want to define 'too long'). </div>
<div dir="auto">As far as more details about the
process, the tensor 'var' (n x m x index where I
have tried different combinations but let's say n
x m is 100 x 200) of floating point numbers is
manipulated according to the following
pseudo-code:</div>
<div dir="auto"># Initial manipulations</div>
<div dir="auto"> dims = var.dimensions</div>
<div dir="auto"> shape = var.shape</div>
<div dir="auto"> driver_name = 'GTIFF'</div>
<div dir="auto"> driver =
gdal.GetDriverByName(driver_name) </div>
<div dir="auto"> np_dtype = var.dtype</div>
<div dir="auto"> type_code =
gdal_array.NumericTypeCodeToGDALTypeCode(np_dtype)</div>
<div dir="auto"> gdal_ds =
driver.Create(_my_path_, cols, rows, 1,
gdal.GDT_UInt16) </div>
<div dir="auto">
gdal_ds.SetProjection(_my_projection_)</div>
<div dir="auto">
gdal_ds.SetGeoTransform(_my_transformation_)</div>
<div dir="auto"># Creation of the bands and scaled
matrix </div>
<div dir="auto"> band =
gdal_ds.GetRasterBand(1) </div>
<div dir="auto"> data =
var[_chosen_index_]</div>
<div dir="auto"> data = ma.getdata(data)</div>
<div dir="auto"> data_scaled =
np.interp(data, (data.min(), data.max()), (0,
255))</div>
<div dir="auto"> data_scaled2 =
data_scaled.astype(int) # This is to rescale into
integers so that it can color the layer</div>
<div dir="auto"># *** Lines to set up the color
palette ***</div>
<div dir="auto"># Write the array to band once
everything has been rescaled</div>
<div dir="auto">
band.WriteArray(data_scaled2)</div>
<div dir="auto"> gdal_ds.FlushCache() </div>
<div dir="auto"><br>
</div>
<div dir="auto">This procedure seems to work well
and takes a reasonable amount of time. Then, the
time is consumed when doing the rendering itself.
I'm not entirely sure what you mean by
'sub-optimal raster format' or 'thre are overviews
missing' so I cannot address them specifically.</div>
<div dir="auto">Thanks,</div>
<div dir="auto">Arturo</div>
<div><br>
</div>
</div>
<div dir="auto"><br>
</div>
<div dir="auto" id="tmjah_g_1299"><br>
</div>
<br>
</div>
<div class="replyHeader" dir="auto">Martin Dobias wrote:</div>
<br>
<br>
<div>
<blockquote
cite="mid:CAC2XbFdWLu-0VKRWYK-YF0XSN5FSoFHfX8Ztm6R6HTfcPa4MNw@mail.gmail.com"
type="cite" style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hi<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, May
26, 2023 at 11:30 PM afernandez via
QGIS-Developer <<a
href="mailto:qgis-developer@lists.osgeo.org"
moz-do-not-send="true"
class="moz-txt-link-freetext">qgis-developer@lists.osgeo.org</a>>
wrote:<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>
<div>
<div
id="m_-6129067434502316114compose-body-wrapper"
dir="auto">
<div dir="auto">
<div dir="auto">Hello,</div>
<div dir="auto">One of my project
would greatly benefit from a much
faster rendering. After some
testing, the bulk (>99%) of the
time is spent at rendering the layer
with QgsRasterLayer(...,...). What I
have also noticed is that rendering
time does not change with the number
of cores, which suggests that the
renderer might be using a single
thread. I checked the API
documentation but couldn't find
anything about multithreading or
some other procedure to accelerate
rendering. I was wondering if anyone
has any suggestion or has faced a
similar difficulty. </div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<div class="gmail_quote"><br>
</div>
<div class="gmail_quote">Multi-threaded rendering
is done at the granularity of whole map layers,
so a single layer is rendered by a single CPU
core. Therefore if you have just one layer that
is slow to render, the multi-threading is not
going to help. It is best to do some testing how
you can improve the layer's rendering - for
example, it could be that you are using some
sub-optimal raster format, or there are
overviews missing, or something else... one
would need more details.</div>
<div class="gmail_quote"><br>
</div>
<div class="gmail_quote">Regards</div>
<div class="gmail_quote">Martin</div>
<div class="gmail_quote"><br>
</div>
</div>
</blockquote>
</div>
</div>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-Developer mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:QGIS-Developer@lists.osgeo.org" moz-do-not-send="true">QGIS-Developer@lists.osgeo.org</a>
List info: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
Unsubscribe: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Johannes Kröger / GIS-Entwickler/-Berater
---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei der <a class="moz-txt-link-abbreviated" href="http://www.foss-academy.com" moz-do-not-send="true">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 class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:johannes.kroeger@wheregroup.com" moz-do-not-send="true">johannes.kroeger@wheregroup.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.wheregroup.com" moz-do-not-send="true">www.wheregroup.com</a>
Geschäftsführer:
Olaf Knopp, Peter Stamm
Amtsgericht Bonn, HRB 9885
-------------------------------
</pre>
</blockquote>
</div>
<div>
<blockquote
cite="mid:3ea1f315-669a-6d32-e5c6-7bbbc74e153f@wheregroup.com"
type="cite" style="margin:0 0 0 .8ex;border-left:1px #ccc
solid;padding-left:1ex">
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<p>Hi Arturo,</p>
<p>make sure you create overviews on your big rasters or
QGIS will re-read the whole file all the time to render an
appropriate representation in the map.</p>
<p>Cheers, Hannes<br>
</p>
<div class="moz-cite-prefix">Am 30.05.23 um 04:35 schrieb
afernandez via QGIS-Developer:<br>
</div>
<blockquote type="cite"
cite="mid:e4867467c3728.ad83e8afff7c4@odyhpc.com">
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
<div>
<meta charset="utf-8">
<div id="compose-body-wrapper" dir="auto">
<div dir="auto">
<div dir="auto">Hello Martin,</div>
<div dir="auto">I'm trying to understand what you're
saying but my background is in numerical methods
where tasks are split into threads for
acceleration purposes. If a single layer is
rendered by a single core (as you write and I was
observing), how would a 1,000 x 1,000 (or a 5,000
x 5,000) layer be handled? Wouldn't it take too
long? (However, you want to define 'too long'). </div>
<div dir="auto">As far as more details about the
process, the tensor 'var' (n x m x index where I
have tried different combinations but let's say n
x m is 100 x 200) of floating point numbers is
manipulated according to the following
pseudo-code:</div>
<div dir="auto"># Initial manipulations</div>
<div dir="auto"> dims = var.dimensions</div>
<div dir="auto"> shape = var.shape</div>
<div dir="auto"> driver_name = 'GTIFF'</div>
<div dir="auto"> driver =
gdal.GetDriverByName(driver_name) </div>
<div dir="auto"> np_dtype = var.dtype</div>
<div dir="auto"> type_code =
gdal_array.NumericTypeCodeToGDALTypeCode(np_dtype)</div>
<div dir="auto"> gdal_ds =
driver.Create(_my_path_, cols, rows, 1,
gdal.GDT_UInt16) </div>
<div dir="auto">
gdal_ds.SetProjection(_my_projection_)</div>
<div dir="auto">
gdal_ds.SetGeoTransform(_my_transformation_)</div>
<div dir="auto"># Creation of the bands and scaled
matrix </div>
<div dir="auto"> band =
gdal_ds.GetRasterBand(1) </div>
<div dir="auto"> data =
var[_chosen_index_]</div>
<div dir="auto"> data = ma.getdata(data)</div>
<div dir="auto"> data_scaled =
np.interp(data, (data.min(), data.max()), (0,
255))</div>
<div dir="auto"> data_scaled2 =
data_scaled.astype(int) # This is to rescale into
integers so that it can color the layer</div>
<div dir="auto"># *** Lines to set up the color
palette ***</div>
<div dir="auto"># Write the array to band once
everything has been rescaled</div>
<div dir="auto">
band.WriteArray(data_scaled2)</div>
<div dir="auto"> gdal_ds.FlushCache() </div>
<div dir="auto"><br>
</div>
<div dir="auto">This procedure seems to work well
and takes a reasonable amount of time. Then, the
time is consumed when doing the rendering itself.
I'm not entirely sure what you mean by
'sub-optimal raster format' or 'thre are overviews
missing' so I cannot address them specifically.</div>
<div dir="auto">Thanks,</div>
<div dir="auto">Arturo</div>
<div><br>
</div>
</div>
<div dir="auto"><br>
</div>
<div dir="auto" id="tmjah_g_1299"><br>
</div>
<br>
</div>
<div class="replyHeader" dir="auto">Martin Dobias wrote:</div>
<br>
<br>
<div>
<blockquote
cite="mid:CAC2XbFdWLu-0VKRWYK-YF0XSN5FSoFHfX8Ztm6R6HTfcPa4MNw@mail.gmail.com"
type="cite" style="margin:0 0 0 .8ex;border-left:1px
#ccc solid;padding-left:1ex">
<div dir="ltr">
<div>Hi<br>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Fri, May
26, 2023 at 11:30 PM afernandez via
QGIS-Developer <<a
href="mailto:qgis-developer@lists.osgeo.org"
moz-do-not-send="true"
class="moz-txt-link-freetext">qgis-developer@lists.osgeo.org</a>>
wrote:<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>
<div>
<div
id="m_-6129067434502316114compose-body-wrapper"
dir="auto">
<div dir="auto">
<div dir="auto">Hello,</div>
<div dir="auto">One of my project
would greatly benefit from a much
faster rendering. After some
testing, the bulk (>99%) of the
time is spent at rendering the layer
with QgsRasterLayer(...,...). What I
have also noticed is that rendering
time does not change with the number
of cores, which suggests that the
renderer might be using a single
thread. I checked the API
documentation but couldn't find
anything about multithreading or
some other procedure to accelerate
rendering. I was wondering if anyone
has any suggestion or has faced a
similar difficulty. </div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<div class="gmail_quote"><br>
</div>
<div class="gmail_quote">Multi-threaded rendering
is done at the granularity of whole map layers,
so a single layer is rendered by a single CPU
core. Therefore if you have just one layer that
is slow to render, the multi-threading is not
going to help. It is best to do some testing how
you can improve the layer's rendering - for
example, it could be that you are using some
sub-optimal raster format, or there are
overviews missing, or something else... one
would need more details.</div>
<div class="gmail_quote"><br>
</div>
<div class="gmail_quote">Regards</div>
<div class="gmail_quote">Martin</div>
<div class="gmail_quote"><br>
</div>
</div>
</blockquote>
</div>
</div>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-Developer mailing list
<a class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:QGIS-Developer@lists.osgeo.org" moz-do-not-send="true">QGIS-Developer@lists.osgeo.org</a>
List info: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
Unsubscribe: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer" moz-do-not-send="true">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Johannes Kröger / GIS-Entwickler/-Berater
---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei der <a class="moz-txt-link-abbreviated" href="http://www.foss-academy.com" moz-do-not-send="true">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 class="moz-txt-link-abbreviated moz-txt-link-freetext" href="mailto:johannes.kroeger@wheregroup.com" moz-do-not-send="true">johannes.kroeger@wheregroup.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.wheregroup.com" moz-do-not-send="true">www.wheregroup.com</a>
Geschäftsführer:
Olaf Knopp, Peter Stamm
Amtsgericht Bonn, HRB 9885
-------------------------------
</pre>
</blockquote>
</div>
</div>
<br>
<fieldset class="moz-mime-attachment-header"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
QGIS-Developer mailing list
<a class="moz-txt-link-abbreviated" href="mailto:QGIS-Developer@lists.osgeo.org">QGIS-Developer@lists.osgeo.org</a>
List info: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
Unsubscribe: <a class="moz-txt-link-freetext" href="https://lists.osgeo.org/mailman/listinfo/qgis-developer">https://lists.osgeo.org/mailman/listinfo/qgis-developer</a>
</pre>
</blockquote>
<pre class="moz-signature" cols="72">--
Johannes Kröger / GIS-Entwickler/-Berater
---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei der <a class="moz-txt-link-abbreviated" href="http://www.foss-academy.com">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 class="moz-txt-link-abbreviated" href="mailto:johannes.kroeger@wheregroup.com">johannes.kroeger@wheregroup.com</a>
<a class="moz-txt-link-abbreviated" href="http://www.wheregroup.com">www.wheregroup.com</a>
Geschäftsführer:
Olaf Knopp, Peter Stamm
Amtsgericht Bonn, HRB 9885
-------------------------------
</pre>
</body>
</html>