Hi Even, Thanks, that seems fair enough. But then am I missing a more straightforward way to do mosaicing *with* custom handling of overlaps?
FWIW, after a bit of tinkering, I was able to fix it for us, by adding a non-Numba wrapper, that filters the input (removing all-nodata layers). But that’s obviously sub-optimal. I will file a ticket. — Dave > On 10 Feb 2023, at 12:18, Even Rouault <even.roua...@spatialys.com> wrote: > > Dave, > > Most use cases of VRTDerivedRasterBand I'm aware of involve non-mosaicing > scenarios where all sources have the same extent, which is the one of the > VRT, and thus are all used. So there's no optimization to remove sources that > don't intersect to the requested area. But that is something definitely > reasonable to fix/optimize. Please file a ticket about that at > https://github.com/OSGeo/gdal/issues > > Even > > Le 10/02/2023 à 11:20, Dave a écrit : >> As part of our processing pipeline, we are trying to use GDAL to merge a >> large (potentially >2000) number of rasters. >> In most cases, the rasters are processed from large sources split into tiles >> of arbitrary coordinates and are mostly non-overlapping, but because of >> reprojection etc, some small overlap could be expected. In other cases, some >> tiles might generate more than one product, and we would have some >> significant overlap. >> >> In order to control the way these overlaps are handled (we potentially need >> to apply our own mean/stdev/etc functions), we are trying to use a >> VRTDataset with a Python PixelFunctionType (using Numba). >> >> Things generally work OK, when the number of tiles is “low” (< 1000), >> however, we ran into an issue where Numba will crash above 1000 tiles, as >> GDAL tries to pass a 1000+ long tuple as `in_arr` argument to the >> PixelFunctionType function. >> >> What I do not understand, is why the tuple passed to the Python function, >> contains *all* the sources, when only a fraction (most of the time: 1) >> overlap with DstRect. >> This happens regardless of whether I try processing the VRT file with >> gdalwarp or gdal_translate. >> >> I guess I am missing something in the way >> VRT/VRTDerivedRasterBand/ComplexSource are supposed to work, but can’t >> figure out why from the VRT documentation page. Is there a better way to >> achieve this? >> >> Below is a small excerpt from a typical VRT file. When run through gdalwarp >> (/gdal_translate), the `in_arr` argument sent to the python function >> invariably contains as many arrays as there are ComplexSource, regardless of >> whether they overlap (non-overlapping one will contain all nodata/0): >> >> <VRTDataset rasterXSize="58786" rasterYSize="9222"> >> <SRS dataAxisToSRSAxisMapping="1,2”>[…]</SRS> >> <GeoTransform> -7.9902911092382642e+06, 4.6331271652776735e+02, >> 0.0000000000000000e+00, 2.2618926820882889e+06, 0.0000000000000000e+00, >> -4.6331271652773665e+02</GeoTransform> >> <VRTRasterBand subClass="VRTDerivedRasterBand" dataType="Float32" band="1" >> NoDataValue="0" blockXSize="128" blockYSize="128"> >> <PixelFunctionType>test.test</PixelFunctionType><PixelFunctionArguments >> nodata="0" /><PixelFunctionLanguage>Python</PixelFunctionLanguage> >> <NoDataValue>0</NoDataValue> >> <HideNoDataValue>1</HideNoDataValue> >> <ColorInterp>Gray</ColorInterp> >> <ComplexSource> >> <SourceFilename >> relativeToVRT="1">././test_vrt/0a06211d1ceccd06aff9a5a50f5e70b5.tif</SourceFilename> >> <SourceBand>1</SourceBand> >> <SourceProperties RasterXSize="568" RasterYSize="544" >> DataType="Float32" BlockXSize="256" BlockYSize="256" /> >> <SrcRect xOff="0" yOff="0" xSize="568" ySize="544" /> >> <DstRect xOff="52791" yOff="4881" xSize="568" ySize="544" /> >> <NODATA>0</NODATA> >> </ComplexSource> >> <ComplexSource> >> <SourceFilename >> relativeToVRT="1">././test_vrt/0a120c177147927bc0bd8c766907e65f.tif</SourceFilename> >> <SourceBand>1</SourceBand> >> <SourceProperties RasterXSize="556" RasterYSize="544" >> DataType="Float32" BlockXSize="256" BlockYSize="256" /> >> <SrcRect xOff="0" yOff="0" xSize="556" ySize="544" /> >> <DstRect xOff="24236" yOff="3796" xSize="556" ySize="544" /> >> <NODATA>0</NODATA> >> </ComplexSource> >> […] >> >> Thanks in advance! >> — >> Dave dV >> _______________________________________________ >> gdal-dev mailing list >> gdal-dev@lists.osgeo.org >> https://lists.osgeo.org/mailman/listinfo/gdal-dev > > -- > http://www.spatialys.com > My software is free, but my time generally not. > _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/gdal-dev