[gdal-dev] Map algebra

alex alexhighviz at hotmail.com
Fri Apr 8 09:22:30 PDT 2016



> -----Original Message-----
> From: gdal-dev [mailto:gdal-dev-bounces at lists.osgeo.org] On Behalf Of 
> Ari Jolma
> Sent: 08 April 2016 07:05
> To: gdal-dev at lists.osgeo.org
> Subject: Re: [gdal-dev] Map algebra
> 
> 08.04.2016, 02:21, alex kirjoitti:
> >> That is one aspect, yes. However, so far I've considered only 
> >> operations on one or two bands at time. Operations on more than two 
> >> can of course be dissolved into a series of operations with max two at a time.
> > That will often be possible, but not always. For instance how would 
> > you dissolve the following function? (without resorting to complete 
> > ugliness like c * a  + !c * b)
> >
> > int conditional(bool c, int a, int b) { return c ? a : b; }
> 
> As an assignment that would be
> 
> d = c ? a : b;
> 
> If all variables are spatial then that's four bands. To save space 
> we'll do in-place modifications to bands. If we do not want to change 
> any of the bands a, b and c, we'll begin by making d a copy of b:
> 
> d = b;
> 
> and then use a conditional
> 
> d = a if c;
> 

Ha, that was easier than I thought :)

 But also quite inefficient. And you'll still need to negotiate three different block sizes.

[snip]

 

> >> The approach is also strongly supported by the basic design of GDAL 
> >> and the fundamental algorithm is presented in GDAL documentation (I 
> >> gave the link in earlier email).
> > I didn't see that email and just trawled through the whole thread, 
> > can you give
> it again?
> 
> http://www.gdal.org/classGDALRasterBand.html#ad80cecc562fd48f5783677de
> 625360ac
> 
> it is a simple algorithm but demonstrates the two level approach.

OK, I also use the ReadBlock and WriteBlock functions instead of the RasterIO. But I still don't see how the principle of iterating over blocks and within blocks is an approach that can be used for two or three bands with different block sizes. 

> >
> >> The solution I already have seems to work well for the one and two 
> >> band case even with 3x3 focal region and as far as I can see it 
> >> could be extended to cases involving more bands.
> 
> I'll add the disclaimer about the curse of dimensionality I mention 
> above for which a solution should be found first. It could be a simple 
> one like copy all blocks to same datatype first.

Can you describe the principle of your method? And where your curse of dimensionality comes in. Perhaps somebody has a solution.

[snip]
> 
> It really depends on the block size, which is something GDAL core and 
> drivers handle.

> >>> 3. Zonal operations: operations that calculate indicators for 
> >>> groups
> >>> (zones) of
> >> pixels.
> >>> This seems more trivial than the other two components of map 
> >>> algebra and I
> >> haven't given it much attention, but I think should be supported.
> >>
> >> One complication, which I just today worked on, seems to stem from 
> >> one requirement that I have. I want the API be free of templates 
> >> and thus there is a need for generic classes for, e.g., numbers 
> >> (GDAL supports bands where data is various length integers or floats).
> >> Thus, for example a simple zonal method, which returns which zones 
> >> share a boundary returns a rather complex data structure.
> > I understand zonal methods to be operating on pixels within zones 
> > and not on
> the relationship between zones. What kind of methods do you have in mind?
> 
> I admit that it is perhaps not a "pure" zonal method. For example, 
> think about the question: "What are the neighboring countries of each country?".

Sure, that is useful functionality, but I was trying to find out what is the rationale and purpose of your Map Algebra library. I think I misunderstood your original announcement email. I thought you intended to offer generic support for Map Algebra type analysis. Instead it seems that you are offering a specific set of Map Algebra functions (as I can now see in the RFC).


More information about the gdal-dev mailing list