Hi Arturo,
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.
Cheers, Hannes
Am 30.05.23 um 04:35 schrieb afernandez via QGIS-Developer:
Hello Martin,
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').
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:
# Initial manipulations
dims = var.dimensions
shape = var.shape
driver_name = 'GTIFF'
driver = gdal.GetDriverByName(driver_name)
np_dtype = var.dtype
type_code = gdal_array.NumericTypeCodeToGDALTypeCode(np_dtype)
gdal_ds = driver.Create(_my_path_, cols, rows, 1,
gdal.GDT_UInt16)
gdal_ds.SetProjection(_my_projection_)
gdal_ds.SetGeoTransform(_my_transformation_)
# Creation of the bands and scaled matrix
band = gdal_ds.GetRasterBand(1)
data = var[_chosen_index_]
data = ma.getdata(data)
data_scaled = np.interp(data, (data.min(), data.max()),
(0, 255))
data_scaled2 = data_scaled.astype(int) # This is to
rescale into integers so that it can color the layer
# *** Lines to set up the color palette ***
# Write the array to band once everything has been rescaled
band.WriteArray(data_scaled2)
gdal_ds.FlushCache()
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.
Thanks,
Arturo
Martin Dobias wrote:
Hi
On Fri, May 26, 2023 at 11:30 PM afernandez via QGIS-Developer
<qgis-developer@lists.osgeo.org> wrote:
Hello,
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.
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.
Regards
Martin
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info:https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe:https://lists.osgeo.org/mailman/listinfo/qgis-developer
--
Johannes Kröger / GIS-Entwickler/-Berater
---------------------------------------------
Aufwind durch Wissen!
Web-Seminare und Online-Schulungen
bei derwww.foss-academy.com
---------------------------------------------
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
johannes.kroe...@wheregroup.com
www.wheregroup.com
Geschäftsführer:
Olaf Knopp, Peter Stamm
Amtsgericht Bonn, HRB 9885
-------------------------------
_______________________________________________
QGIS-Developer mailing list
QGIS-Developer@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer