Hi Jorge,<br><br>What I have in my mind is something like the DirectRasterIO implementation in  WCSDataset / WCSRasterBand (see wcsdataset.cpp). It appears that this driver is suffering from the same issue, and intend to minimize the roundtrips to the server as much as possible. It looks like this direct implementation doesn&#39;t rely on IReadBlock called by an upper level IRasterIO therefore the RasterBlock cache is also omitted in this case.<br>
<br><br>Best regards,<br><br>Tamas<br><br><br><br><div class="gmail_quote">2009/8/8 Jorge Arévalo <span dir="ltr">&lt;<a href="mailto:jorge.arevalo@gmail.com">jorge.arevalo@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hello,<br>
<br>
2009/8/7 Tamas Szekeres &lt;<a href="mailto:szekerest@gmail.com">szekerest@gmail.com</a>&gt;:<br>
<div class="im">&gt; Just thinking out loadly;<br>
&gt;<br>
&gt; Wouldn&#39;t it be easier to implement that cache at the driver level, just by<br>
&gt; composing the raster in a temp image buffer and feed that image in the<br>
&gt; subsequent IReadBlock calls? I think we should also think about the non<br>
&gt; regular and overlapping blocks which should also be covered by the<br>
&gt; implementation here.<br>
&gt;<br>
<br>
</div>And this buffer, would it be part of the Dataset, as a property?<br>
What&#39;s the common way of reading data with a GDAL driver? I suppose<br>
that the sequence is like this:<br>
<br>
User&#39;s program --&gt; GDALRasterBand::RasterIO --&gt; Format specific<br>
IRasterIO --&gt; Format specific IReadBlock.<br>
<br>
If the format speficic IRasterIO is not implemented, the generic<br>
GDALRasterBand::IRasterIO is called, and this method calls IReadBlock<br>
if needed (by GetLockedBlockRef).<br>
<br>
Am I right?<br>
<br>
If yes, in what point should I implement the cache at &quot;driver level&quot;?<br>
<div class="im"><br>
Thanks in advance<br>
<br>
Best regards,<br>
Jorge<br>
<br>
</div><div><div></div><div class="h5">&gt; Best regards,<br>
&gt;<br>
&gt; Tamas<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2009/8/7 Tamas Szekeres &lt;<a href="mailto:szekerest@gmail.com">szekerest@gmail.com</a>&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; 2009/8/7 Jorge Arévalo &lt;<a href="mailto:jorge.arevalo@gmail.com">jorge.arevalo@gmail.com</a>&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt; One issue with this concept would be related to the limited memory size<br>
&gt;&gt;&gt; &gt; of<br>
&gt;&gt;&gt; &gt; the particular machine, it may be more reasonable to copy the retrieved<br>
&gt;&gt;&gt; &gt; blocks directly onto the output buffer if possible. In this case you<br>
&gt;&gt;&gt; &gt; cannot<br>
&gt;&gt;&gt; &gt; much rely on the base RasterIO implementation.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So, you suggest to copy the block data into the buffer without calling<br>
&gt;&gt;&gt; base implementation of IRasterIO, do you? This implies take care of<br>
&gt;&gt;&gt; the endianess and pixel size &quot;by hand&quot;.<br>
&gt;&gt;<br>
&gt;&gt; And many more... I agree this wouldn&#39;t be that straightforward. Populating<br>
&gt;&gt; the block buffer would be much easier.<br>
&gt;&gt;<br>
&gt;&gt; Best regards,<br>
&gt;&gt;<br>
&gt;&gt; Tamas<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></blockquote></div><br>