Hi Even,<br><br>Thank you for the additional resources! hehe and thanks to Frank for making GDAL available :)<br><br clear="all">Kind regards<br>Pooven<br><br><div class="gmail_quote">On Fri, May 29, 2009 at 7:59 PM, Even Rouault <span dir="ltr">&lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Pooven,<br>
<br>
We clearly miss a specific documentation for the GDAL Python bindings<br>
(contributions welcome !). The OGR ones have docstring help generated from<br>
C++ doxygen.<br>
<br>
Generally, the Python API is close to the C++ one that is documented on the<br>
website, but there are a few specific methods like ReadRaster() that are<br>
specific to the binding. There&#39;s also the Javadoc of the Java bindings<br>
(<a href="http://gdal.org/java/" target="_blank">http://gdal.org/java/</a>) that can be somehow useful, as they share a lot of<br>
things in common, but expect a few differences too.<br>
<br>
A few other potential helpfull pointers :<br>
* Someone brought my attention to the following site,<br>
<a href="http://www.gis.usu.edu/%7Echrisg/python/" target="_blank">http://www.gis.usu.edu/~chrisg/python/</a>, that has very interesting slides and<br>
exercices about how to use GDAL/OGR in Python.<br>
* The various utilities written in Python, can also serve as exemple :<br>
<a href="http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/scripts" target="_blank">http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/scripts</a><br>
<a href="http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/samples" target="_blank">http://trac.osgeo.org/gdal/browser/trunk/gdal/swig/python/samples</a><br>
<br>
(Ah, and Frank Warmerdam, &quot;the guy there&quot; answering in the post you refer to,<br>
is the main author of GDAL ;-) )<br>
<br>
Even<br>
<br>
Le Friday 29 May 2009 08:43:08 Poovendran Moodley, vous avez écrit :<br>
<div><div></div><div class="h5">&gt; Hi Even,<br>
&gt;<br>
&gt; I&#39;m really appreciative of your help! And yes, gt[2] = gt[4] = 0 :) Here&#39;s<br>
&gt; the code that I&#39;ve written thus far (for those that are interested --<br>
&gt; hopefully I&#39;m not mistaken in my coding!):<br>
&gt; def select(filename, x1, y1, x2, y2):<br>
&gt;     dataset = gdal.Open( filename, GA_ReadOnly )<br>
&gt;     colStart = int(math.ceil((x1 - gt[0])/gt[1]))<br>
&gt;     rowStart = int(math.ceil((y1 - gt[3])/gt[5]))<br>
&gt;     colEnd = int(math.ceil((x2 - gt[0])/gt[1]))<br>
&gt;     rowEnd = int(math.ceil((y2 - gt[3])/gt[5]))<br>
&gt;     band = dataset.GetRasterBand(1)<br>
&gt;     n = colEnd - colStart + 1<br>
&gt;     colStart = colStart - 1 #Because ReadRaster begins at row 0<br>
&gt;     for k in range(rowStart - 1, rowEnd):<br>
&gt;         scanline = band.ReadRaster(colStart, k, n, 1, n, 1, GDT_Float32)<br>
&gt; &#39;&#39;&#39; reading 1 row at a time within specified window &#39;&#39;&#39;<br>
&gt;         tuple_of_floats = struct.unpack(&#39;f&#39; * n, scanline)<br>
&gt;         print tuple_of_floats<br>
&gt;<br>
&gt; It took me a while to fully understand how ReadRaster works. I read a post<br>
&gt; in the FWTools newsgroup:<br>
&gt; <a href="http://lists.maptools.org/pipermail/fwtools/2005-September/000138.html" target="_blank">http://lists.maptools.org/pipermail/fwtools/2005-September/000138.html</a><br>
&gt; The guy there explained the usage quite well. It&#39;s a pity that there isn&#39;t<br>
&gt; more documentation readily available. Thank you again for your assistance<br>
&gt; Even! All of the best to you :)<br>
&gt;<br>
&gt; Kind regards<br>
&gt; Pooven<br>
&gt;<br>
&gt; On Wed, May 27, 2009 at 9:35 PM, Even Rouault<br>
&gt;<br>
&gt; &lt;<a href="mailto:even.rouault@mines-paris.org">even.rouault@mines-paris.org</a>&gt;wrote:<br>
&gt; &gt; Pooven,<br>
&gt; &gt;<br>
&gt; &gt; You&#39;re doing things the right way. GDAL doesn&#39;t provide any high-level<br>
&gt; &gt; function to extract a region from a bounding box expressed in projected<br>
&gt; &gt; coordinates. You have to compute the pixel coordinates of the corner of<br>
&gt; &gt; the bounding box yourself by using the inverse of the geotransform matrix<br>
&gt; &gt; returned by the GetGeoTransform() method of the dataset.<br>
&gt; &gt;<br>
&gt; &gt; gt = ds.GetGeoTransform()<br>
&gt; &gt; x_pixel = (x_projected - gt[0]) / gt[1]<br>
&gt; &gt; y_pixel = (y_projected - gt[3]) / gt[5]<br>
&gt; &gt;<br>
&gt; &gt; (provided that your raster doesn&#39;t has any rotation or shearing, that is<br>
&gt; &gt; to say that gt[2] = gt[4] = 0)<br>
&gt; &gt;<br>
&gt; &gt; Best regards,<br>
&gt; &gt; Even<br>
&gt; &gt;<br>
&gt; &gt; Le Wednesday 27 May 2009 12:06:10 Poovendran Moodley, vous avez écrit :<br>
&gt; &gt; &gt; Hi there,<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I want to select only a region of a raster file; that is, suppose I<br>
&gt; &gt; &gt; know the coordinates that form a bounding box around a region, I want<br>
&gt; &gt; &gt; to<br>
&gt; &gt;<br>
&gt; &gt; select<br>
&gt; &gt;<br>
&gt; &gt; &gt; just that region and write it to another file.<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; I&#39;m rather new to GDAL and thus far I&#39;m only aware of one way to do<br>
&gt; &gt; &gt; this;<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; since I&#39;m using Python:<br>
&gt; &gt; &gt; &gt; scanline = band.ReadRaster( 0, 0, band.XSize, 1, band.XSize, 1,<br>
&gt; &gt; &gt; &gt; GDT_Float32<br>
&gt; &gt; &gt; &gt; &lt;<br>
&gt; &gt;<br>
&gt; &gt; <a href="http://www.gdal.org/gdal_8h.html#22e22ce0a55036a96f652765793fb7a4f5cbd2f" target="_blank">http://www.gdal.org/gdal_8h.html#22e22ce0a55036a96f652765793fb7a4f5cbd2f</a><br>
&gt; &gt;<br>
&gt; &gt; &gt; &gt;96abffd9ac061fc0dced5cbba&gt; )<br>
&gt; &gt; &gt; &gt;<br>
&gt; &gt; &gt; &gt; I believe that I can specify the window of raster data to read using<br>
&gt; &gt;<br>
&gt; &gt; the<br>
&gt; &gt;<br>
&gt; &gt; &gt; 3rd till 6th input parameters of the above method (with reasonable size<br>
&gt; &gt; &gt; reads untill the entire regions I&#39;m interested in is read).<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Is there some other way this was suppose to be done? The method above<br>
&gt; &gt;<br>
&gt; &gt; will<br>
&gt; &gt;<br>
&gt; &gt; &gt; require me to convert my coordinates into rows and columns (I think)<br>
&gt; &gt;<br>
&gt; &gt; which<br>
&gt; &gt;<br>
&gt; &gt; &gt; is fine... but leaves room for error so I&#39;d like to only rely on GDAL<br>
&gt; &gt; &gt; routines. Can someone please advise? It could very well be that I&#39;m<br>
&gt; &gt;<br>
&gt; &gt; totally<br>
&gt; &gt;<br>
&gt; &gt; &gt; mistaken... I hope this isn&#39;t such a bad question...<br>
&gt; &gt; &gt;<br>
&gt; &gt; &gt; Kind regards<br>
&gt; &gt; &gt; Pooven<br>
<br>
<br>
</div></div></blockquote></div><br>