<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7651.59">
<TITLE>BandWriteArray and FlushCache question</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">hi list,</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">I recently upgraded to gdal 1.6.0</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">and found that one</FONT> <FONT SIZE=2 FACE="Courier New">Python</FONT> <FONT SIZE=2 FACE="Courier New">function</FONT> <FONT SIZE=2 FACE="Courier New">that used to work in</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> 1.4.4</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> no longer works.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">T</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">he</FONT> <FONT SIZE=2 FACE="Courier New">purpose of</FONT> <FONT SIZE=2 FACE="Courier New">function</FONT> <FONT SIZE=2 FACE="Courier New">was to read in a band, perform matrix manipulation (in this case, subtract a baseline) and resave.</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">T</FONT><FONT SIZE=2 FACE="Courier New">he error that</FONT> <FONT SIZE=2 FACE="Courier New">I am getting is that</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">in the new dataset</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">the</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">last</FONT> <FONT SIZE=2 FACE="Courier New">hundreds of lines</FONT> <FONT SIZE=2 FACE="Courier New">DN</FONT> <FONT SIZE=2 FACE="Courier New">are</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">written</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT> <FONT SIZE=2 FACE="Courier New">zero</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">If I take out the last line</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">&#8220;</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT COLOR="#FF0000" SIZE=2 FACE="Courier New">self.balanced_ds.FlushCache()</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT COLOR="#FF0000" SIZE=2 FACE="Courier New">&#8221;</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">then the entire</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">dataset</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">is</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">written</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">as</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">zeros</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;</FONT> <FONT SIZE=2 FACE="Courier New">None of</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">errors</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> would happen in gdal 1.4.4.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">I</FONT><FONT SIZE=2 FACE="Courier New">s there any changes</FONT> <FONT SIZE=2 FACE="Courier New">in</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">gdal 1.6.0</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> w.r.t</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">.</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"> <FONT SIZE=2 FACE="Courier New">FlushCache()</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"> ?</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;</FONT> <FONT SIZE=2 FACE="Courier New">W</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">hat</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT> <FONT SIZE=2 FACE="Courier New">is</FONT><FONT SIZE=2 FACE="Courier New"> the right way</FONT> <FONT SIZE=2 FACE="Courier New">to perform this?</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-us"></SPAN><A NAME=""><SPAN LANG="en-us"></SPAN><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">thanks,</FONT></SPAN></A></P>

<P DIR=LTR><SPAN LANG="en-us"><FONT SIZE=2 FACE="Courier New">Shawn</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-us"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">===================================</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">RCS_PROC_STEP = 300</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">src_ds = gdal.Open(src_filename)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">self.balanced_ds = gdal.GetDriverByName(&quot;GTiff&quot;).CreateCopy(tmp_filename, src_ds, 0)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">bandobj = self.balanced_ds.GetRasterBand(1)</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">xsize, ysize = self.balanced_ds.RasterXSize,self.balanced_ds.RasterYSize </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">output_datatype = gdalnumeric.GDALTypeCodeToNumericTypeCode( bandobj.DataType )</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">nblocks = ysize / RCS_PROC_STEP + 1</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">nlines = RCS_PROC_STEP</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">for block in range( nblocks ):</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT>&nbsp;<FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp; first_line = RCS_PROC_STEP*block </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp; if block == nblocks - 1:</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nlines = ysize - first_line</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New"></FONT>&nbsp;<FONT SIZE=2 FACE="Courier New"></FONT> <FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp; datablock = gdalnumeric.BandReadAsArray( bandobj, 0, first_line, xsize, nlines )</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp; datablock = datablock - baseline</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp; gdalnumeric.Ba</FONT><FONT SIZE=2 FACE="Courier New">ndWriteArray( bandobj, datablock.astype(gdalnumeric.Int16</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">)</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT SIZE=2 FACE="Courier New">, 0, first_line )</FONT></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">bandobj.FlushCache()</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"><FONT COLOR="#FF0000" SIZE=2 FACE="Courier New">self.balanced_ds.FlushCache()</FONT></SPAN><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

<P DIR=LTR><SPAN LANG="en-ca"></SPAN><SPAN LANG="en-ca"></SPAN></P>

</BODY>
</HTML>