Hi,

Sorry for missing this last month due to holidays.

In fact in my approach I do not want to limit to single pixel operations but support neighborhood operations too. That is necessary for watershed analysis for example. Making sure that the neighborhood is readily available for computations is probably what is causing the biggest problem for the code. I also have a callback support. See for example https://github.com/ajolma/gdal/blob/trunk/gdal/map_algebra/test.cpp where on the lines 5 to 12 is a callback function.

When I left the code for my extended holidays I was doing profiling and intended to test another approach for caching. Now the caching is based on the native GDAL blocks, which is efficient for going through a single dataset. Since the block may be different for different datasets this approach may not be the best when there are more than one dataset. For example the raster algebra in QGIS uses an approach where the block is the same for all datasets. That simplifies the code and may be very efficient as a whole.

I'll be at the code sprint in FOSS4G 2016 and that would be a good place to discuss the RFC too.

Best,

Ari


13.07.2016, 10:09, James Ramm kirjoitti:
Peter,
I think 'Grid Algebra' would be what Ari Jolma is proposing here: https://trac.osgeo.org/gdal/wiki/rfc62_raster_algebra

As Even pointed out, there is some overlap, though my proposal is technically very different.
The key differences I see are:

- Users can submit functions which operate on each sub window of the raster, rather than an algebraic expression. This potentially allows for much more complicated algorithms to be used (e.g. I dont think it would be possible to run a watershed segmentation with a raster algebra implementation, or to have algorithms which behave differently depending on the 'location' within the raster or the values of surrounding pixels etc etc).

- Functions can be chained together for a complex processing toolchain. Some overlap with VRT here, although again this introduces a little more flexibility.

On 12 July 2016 at 15:47, Peter Halls <p.ha...@york.ac.uk <mailto:p.ha...@york.ac.uk>> wrote:

    James,

          in reality, are you not requesting an implementation of
    Tomlin's 'Grid Algebra' in GDAL?  That defines the whole range of
    functions from whole raster to pixel and has the distinct
    advantage of being both published and extremely well known because
    of other implementations ... which also provide ready-made
    reference bases for the GDAL implementors ...

    Best wishes,
    Peter

    On 12 July 2016 at 15:39, James Ramm <jamessr...@gmail.com
    <mailto:jamessr...@gmail.com>> wrote:

        Hi Even,

        The difference I see with pixel functions is that, as far as I
        understand, the pixel function is applied per pixel, so there
        is no possibility of e.g. the pixel buffer when have the
        function apply to 'blocks'.
        I may be way off, but many of the algorithms we deal with
        require some kind of neighbourhood search - a polygonise
        algorithm or flow direction algorithm being good examples.
        I dont think VRT pixel functions allow this?

        So in that sense I'd see a VRT being 'just' another potential
        input data source.

        Perhaps VRT pixel functions could be expanded to also allow
        'window' functions?

        A downside is it requires creating a VRT even when you only
        want to apply a such a function to a single dataset. Small
        effort, but still a bit more than throwing in any GDALDataset
        to be processed.

        I see the overlap with raster algebra, although yes
        technically very different.



        On 12 July 2016 at 14:55, Even Rouault
        <even.roua...@spatialys.com
        <mailto:even.roua...@spatialys.com>> wrote:

            James,

            There's some intersection with Ari's proposal :
            https://trac.osgeo.org/gdal/wiki/rfc62_raster_algebra . At
            least regarding the
            overall purposes, since technically this is quite different.

            Actually what you propose is very close to the existing
            VRT pixel functions of
            derived bands. See "Using Derived Bands" in
            http://www.gdal.org/gdal_vrttut.html . In the last days,
            we've merged
            Antonio's work regarding a predefined set of pixel functions.
            Perhaps some extension to allow passing user parameters to
            the pixel func
            could be useful. It is possible to use pixel functions
            from Python as shown in
            
https://github.com/OSGeo/gdal/blob/trunk/autotest/gcore/testnonboundtoswig.py#L303
            although this is a bit ugly as it uses ctypes and not
            SWIG. But should be
            possible through SWIG by introducing proper types
            similarly to what is done
            for the progress functions or error handler functions.

            Even


_______________________________________________
gdal-dev mailing list
gdal-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to